我正在阅读http://learnyouahaskell.com/for-a-few-monads-more#useful-monadic-functions
将列表复制到我的文件中,但它没有编译。
import Control.Monad.Writer
logNumber :: Int -> Writer [String] Int
logNumber x = Writer (x, ["Got number: " ++ show x])
multWithLog :: Writer [String] Int
multWithLog = do
a <- logNumber 3
b <- logNumber 5
return (a*b)
Main.hs:4:15: error:
• Data constructor not in scope:
Writer :: (Int, [[Char]]) -> Writer [String] Int
• Perhaps you meant one of these:
‘WriterT’ (imported from Control.Monad.Writer),
variable ‘writer’ (imported from Control.Monad.Writer)
Failed, modules loaded: none.
如何解决?一切似乎都是正确的。
答案 0 :(得分:1)
当Control.Monad.Writer
仍导出Writer
构造函数时,编写了LYAH。现在,您必须导入Control.Monad.Trans.Writer
,它定义WriterT
monad转换器以及定义为
Writer
类型
type Writer w = WriterT w Identity