Я новичок в функциональном программировании и недавно изучаю Учите вас в 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 w a..." поэтому я смущен тем, как кормить конструктор данных и получить Writer.
Я предполагаю, что это может быть проблема, связанная с версией, и моя версия ghci - это 7.4.1