
No, you can do the GHCi trick, converting it to Core, perform a small number of Core-to-Core transformations, convert it to bytecode, interpret the bytecode. Compare this to the programmer time to implement directly executing an interpetted expression, and it starts to get complex.
One of the things on the long list of questions I haven't got round to asking yet is "is there some library that lets you execute arbitrary Haskell code from a string?" Clearly GHCi manages to do it without difficulty. Apparently hs-plugins allows this too, but... surely this is a sledgehammer to crack a nut? A Haskell program is just a set of graph rewrite rules, after all...
Also remember that evaluating an expression in Haskell is _really_ hard!
Really? Looks pretty damn simple to me...
The value depends on the types, there is loads of sugar, loads of libraries etc. A Haskell compiler is a very hard thing to write, an interepretter doesn't save much of that complexity.
Oh, yeah, well, definitely the hardest part is *parsing* Haskell. In particular, the fact that layout exists makes this problem essentually unsolvable. If I could figure out how to parse Haskell, executing it wouldn't be too hard. (Unless you wanted it to actually be capable of running *arbitrary* programs - ones that use FFI, concurrency, mutable state, exceptions, graphics, etc. Or if you want it to be *efficient*. If you just want to be able to run pure functional code and have it produce a correct result, that's quite easy.)