私は関数型プログラミングが初めてで、最近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 wa ...」のようなものであるはずだったので、データコンストラクターにフィードしてWriterを取得する方法について混乱しています。
私はそれがバージョン関連の問題であるかもしれないと思います、そして私のghciバージョンは7.4.1です