Я играл с монадой Reader в Purescript, и я столкнулся с странным поведением. Я не знаю, так ли это из-за моего отсутствия понимания этой монады, или если мне не хватает чего-то другого.Reader Monad in Purescript
Это мой код:
type Level = Number
type Doc = Reader Level String
renderLine :: String -> Level -> String
renderLine s 0 = s
renderLine s l = "\t" ++ (renderLine s (l - 1))
line :: String -> Doc
line s = do
level <- ask
return (renderLine s level)
Это нормально и будет компилировать. Тем не менее, до этого я пытался что-то более простое в моей функции линии, как это:
line :: String -> Doc
line s = do
level <- ask
return "Hello Reader monad"
И это не компилируется, несмотря на то, что (уровень renderLine S) и «Hello Считыватель монада» имеет тот же тип. Он бросит мне эту ошибку: "Нет экземпляр найден Control.Monad.Reader.Class.MonadReader u14555 (Control.Monad.Reader.Trans.ReaderT Prim.Number Control.Monad.Identity.Identity)"
I «Конечно, я что-то упускаю, но я не знаю, что.
Спасибо! Действительно хорошее объяснение :) –