Я играл с этим писателем монады каротажного например:Haskell каротаж с DateTimes
http://monads.haskell.cz/examples/example17.hs
Я использую его в качестве проблемы игрушек, чтобы выяснить, как использовать писатель монады протоколирование. Я пытаюсь изменить программу, чтобы она выводила дату и время с каждой строкой. Мое начальное мышление изменить logMsg
вроде этого:
-- add a message to the log
logMsg :: String -> Writer [Entry]()
logMsg s = do
datetime <- getClockTime
tell [Log 1 (datetime ++ " " ++ s)]
Но это не компилируется. Я думаю, что мне нужно вставить IO
. Где? Помогите!
'type WriterIO = WriterT IO Identity' не будет компилироваться, первым параметром является« Monoid », используемый для ведения журнала. Вероятно, вы имели в виду 'type WriterIO w = WriterT w IO'. –
ОК, я также изменил runWriter на runWriterT, но теперь он говорит: Не удалось совместить ожидаемый тип '(,) t0 'с фактическим типом' IO' Ожидаемый тип: WriterT [Entry] ((,) t0) a0 Фактический type: WriterIO [Entry] [Packet] В обратном типе вызова 'filterAll ' В первом аргументе' runWriterT', а именно '(filterAll rules packages) ' –