Equivalent of python eval in Haskell

eval, haskell, metaprogramming, python

Solution

It is true that in Haskell, as in Java or C++ or similar languages, you can call out to the compiler, then dynamically load the code and execute it. However, this is generally heavy weight and almost never why people use `eval()` in other languages.

People tend to use `eval()` in a language because given that language's facilities, for certain classes of problem, it is easier to construct a string from the program input that resembles the language itself, rather than parse and evaluate the input directly.

For example, if you want to allow users to enter not just numbers in an input field, but simple arithmetic expressions, in Perl or Python it is going to be much easier to just call `eval()` on the input than writing a parser for the expression language you want to allow. Unfortunately, this kind of approach, almost always results in a poor user experience overall (compiler error messages weren't meant for non-programmers) and opens security holes. Solving these problems without using `eval()` generally involves a fair bit of code.

In Haskell, thanks to things like Parsec, it is actually very easy to write a parser and evaluator for these kinds of input problems, and considerably removes the yearning for `eval`.

Problem

There is function in python called `eval` that takes string input and evaluates it. ``` >>> x = 1 >>> print eval('x+1') 2 >>> print eval('12 + 32') 44 >>> ``` What is Haskell equivalent of `eval` function?

Original source