Загрузка динамического модуля haskell - PullRequest
4 голосов
/ 20 февраля 2011

Я ищу способ загрузить функцию Haskell из строки для запуска.Я знаю тип до этого, но не знаю содержимого функции.

В идеале решение должно быть быстрым и не требует запуска в IO.

Я искалв подсказке (Language.Haskell.Interpreter), но он не подходит для счета (электронные вызовы показывают, модули должны быть в файлах).

Любая помощь будет оценена.

Ответы [ 2 ]

3 голосов
/ 20 февраля 2011

hint и plugins являются основными параметрами. hint позволяет интерпретировать функции как байт-код, plugins использует скомпилированный объектный код.

Обратите внимание, что, поскольку эти функции 'eval' должны проверяться типом перед их запуском, они редко являются чистыми значениями, поскольку оценка может завершиться с ошибкой типа.

0 голосов
/ 20 февраля 2011

Абстрактный ответ заключается в том, что вам просто нужно сделать (->) экземпляром 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
...