The person who designs the effect system, which is also constrained by the language design if it is an embedded DSL.
You can imagine a language that is like Haskell, but requires all allocation to happen inside IO. That would be quite a different language. All constructors, lambdas, and let expressions would return a value wrapped in IO.
(Unlifted types have little to do with the allocation itself, more with the memory layout and when evaluation happens; EDIT: unboxed types on the other hand do avoid memory allocation).