Я застрял пытается получить эту функцию:Haskell- Запуск монады состояния
runArrayState :: Array arr => ArrayState arr e a -> arr e -> (a, arr e)
запустить действие ArrayState давайте назовем его акт с массивом обр и получить результат и вернуть результат Рез и исходный массив arr ' как пара (res, arr').
ArrayState определяется как
data ArrayState arr e a = MkArrayState (arr e -> (a, arr e))
Я думал, что это будет:
runArrayState act arr = ((act arr), arr)
или
runArrayState MkArrayState (\ arr -> (res, arr)) arr' = (res, arr')
, но все это не удается. Есть идеи?
'ArrayState' имеет только один конструктор с одним аргументом. В почти каждой такой ситуации вместо этого вы должны использовать 'newtype'. – luqui
О, кстати, вы получаете 'runArrayState' бесплатно, если вы определяете' ArrayState' в этом идиоматическом стиле: 'newtype ArrayState arr e a = MkArrayState {runArrayState :: arr e -> (a, arr e)}' – luqui