以下代码来自LYAH,无法编译。下面附上代码和编译时的错误信息。在LYAH页面中,该代码位于页面下方约15%的位置,感谢emacs浏览器:)
你有什么想法吗?我是否忽略了一些非常明显的东西?
(尽管标题相似,但我认为我的问题与此问题不同。)
这是代码(保存在我命名为
你有什么想法吗?我是否忽略了一些非常明显的东西?
(尽管标题相似,但我认为我的问题与此问题不同。)
这是代码(保存在我命名为
testcopy.hs
的文件中)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)
这里是编译时错误:
Prelude> :l testcopy.hs
[1 of 1] Compiling Main ( testcopy.hs, interpreted )
testcopy.hs:4:15:
Not in scope: data constructor `Writer'
Perhaps you meant `WriterT' (imported from Control.Monad.Writer)
Failed, modules loaded: none.
Writer
替换为writer
。类型签名中以小写字母开头的部分始终指代类型变量,这并不是我们在这里想要的。我们需要具体类型的Writer
。 - David YoungControl.Monad.Writer
和Control.Monad.Trans.Writer
都导出了Writer
(以及主要相关内容),因此不需要更改导入。 - David Young