Abstract answer: you just need to make (->) instance of Read (and maybe Show while you're on it)
How, in fact, you should do this, I do not know. This is a small task to interpret the code.
If you are dealing with simple functions, I would suggest creating a type of algebraic data to represent it.
data Fun = Add | Subtract | Multiply deriving (Eq, Show, Read) runFun Add = (+) runFun Subtract = (-) runFun Multiply = (*)
*Main> runFun (read "Add") 2 3 5 *Main> runFun (read "Multiply") 2 3 6 *Main> runFun (read "Subtract") 2 3 -1
source share