私は関数型プログラミングの初心者で、最近Learn You a 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'
私の見解では、これは「newtype Writer は ...」のようなものになるはずだったので、データ コンストラクターをフィードして Writer を取得する方法について混乱しています。
バージョン関連の問題である可能性があり、私のghciバージョンは7.4.1です