Я пытаюсь сделать монаду читателя, но он не работает (нагрузка), что я делаю неправильно? БлагодаряЧитатель monad core operator не работает
newtype Reader r a = Reader { runReader :: r -> a }
instance Monad (Reader r) where
return a = Reader $ \r -> a
Reader m >>= f = Reader $ \r ->
let a = m r
in runReader (f a)
Я получаю эту ошибку:
Couldn't match type ‘b’ with ‘r -> b’
‘b’ is a rigid type variable bound by
the type signature for
(>>=) :: Reader r a -> (a -> Reader r b) -> Reader r b
at Reader.hs:24:14
Expected type: Reader r b
Actual type: Reader r (r -> b)
Relevant bindings include
f :: a -> Reader r b (bound at Reader.hs:24:18)
m :: r -> a (bound at Reader.hs:24:12)
(>>=) :: Reader r a -> (a -> Reader r b) -> Reader r b
(bound at Reader.hs:24:5)
In the expression: Reader $ \ r -> let a = ... in runReader (f a)
In an equation for ‘>>=’:
(Reader m) >>= f = Reader $ \ r -> let ... in runReader (f a)
In the instance declaration for ‘Monad (Reader r)’
Failed, модули загружены: нет.
См. Позже редактирование – yonutix
Я думаю, вам могут понадобиться скобки '(Reader m)' при выполнении сопоставления с образцом – Mokosha
@genisage Это точно ответ, и вы должны опубликовать его как таковой. – bheklilr