Абстрактный ответ заключается в том, что вам просто нужно сделать (->)
экземпляром Read
(и, возможно, Показать , пока вы в нем)
Как, черт возьми, ты должен это делать, я не знаю.Не так уж сложно интерпретировать код.
Если вы имеете дело с простыми функциями, я бы предложил создать алгебраический тип данных для их представления.
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