У меня есть тип data
, в котором я хотел бы сохранить функцию: State Foo a -> a
. Предположительно, когда экземпляр этого типа будет создан, программа частично применит evalState
с начальным состоянием для вычисления и сохранит полученную функцию в структуре данных. Позже функция может быть извлечена из экземпляра и использована для оценки одного или нескольких вычислений в монаде State
и получения результата.Как сохранить полиморфную функцию в типе данных
-- This doesn't work
data Bar = Bar {
-- other members here
runWithState :: State Foo a -> a
}
==> Not in scope: type variable 'a'
Я не могу сделать более конкретное, потому что я не знаю, что конечный результат вычислений будет, и она может меняться в зависимости от того, что производит вычисления.
Как мне сделать проверку типа с этим?
Примечание: с помощью GHC. Расширения в порядке. –