Я пытаюсь распечатать текущее время после каждой строки, оцененной в ghci
. Вот мой код до сих пор:Невозможно использовать -interactive-print для печати временных меток после каждой строки в ghci
module TimePrint (timePrint) where
import System.IO
import Data.Time
getTime :: IO String
getTime = do
now <- getCurrentTime
return (formatTime defaultTimeLocale "%T" now)
timePrint :: Show a => a -> IO()
timePrint a = putStrLn $ show a ++ "\n" ++ getTime
И я бегу ghci
так: ghci -interactive-print=TimePrint.timePrint TimePrint
Ошибка я получаю это:
TimePrint.hs:12:44:
Couldn't match expected type ‘[Char]’ with actual type ‘IO String’
In the second argument of ‘(++)’, namely ‘getTime’
In the second argument of ‘(++)’, namely ‘"\n" ++ getTime’
Failed, modules loaded: none.
я понимаю, что что-то делать с тем, что timePrint не находится в монаде IO, но кроме этого я понятия не имею. Есть идеи? Я хотел бы каждую линию ghci
выхода выглядеть примерно так:
Prelude> 1+2
3
11:59:20
Prelude> 3+4
7
12:00:16
т.д.
Другими словами, <- - запустить действие IO и превратить его в (в данном случае) строку? – masterchefsenior
@masterchefsenior точно! – Franky