最佳答案
我刚接触函数式编程,最近在 向你学习 Haskell学习,但当我通过 这一章课程时,我被下面的程序卡住了:
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)
我将这些代码行保存在.hs 文件中,但是没有将其导入到我的 ghci 文件中,该文件抱怨:
more1.hs:4:15:
Not in scope: data constructor `Writer'
Perhaps you meant `WriterT' (imported from Control.Monad.Writer)
Failed, modules loaded: none.
我通过“ : info”命令检查了类型:
Prelude Control.Monad.Writer> :info Writer
type Writer w = WriterT w Data.Functor.Identity.Identity
-- Defined in `Control.Monad.Trans.Writer.Lazy'
在我看来,这应该是类似于“新型作家”的东西 所以我对如何提供数据构造函数和获得 Writer 感到困惑。
我想这可能是一个版本相关的问题,我的 ghci 版本是7.4