为什么Writer构造函数会导致语法错误

时间:2017-11-28 13:57:40

标签: haskell

我正在阅读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.    

如何解决?一切似乎都是正确的。

1 个答案:

答案 0 :(得分:1)

Control.Monad.Writer仍导出Writer构造函数时,编写了LYAH。现在,您必须导入Control.Monad.Trans.Writer,它定义WriterT monad转换器以及定义为

的简单Writer类型
type Writer w = WriterT w Identity