Не могу использовать -interactive-print для печати меток времени после каждой строки в ghci

Я пытаюсь напечатать текущее время после каждой строки, оцененной в 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 не входит в монаду ввода-вывода, но кроме этого я понятия не имею. Есть идеи? Я бы хотел, чтобы каждая строка ghci вывод выглядеть примерно так:

Prelude> 1+2
3
11:59:20
Prelude> 3+4
7
12:00:16

и т.п.

1 ответ

Решение
timePrint a = do
   s <- getTime
   putStrLn $ show a ++ "\n" ++ s

++ хочет строку, а не действие ввода-вывода.

Другие вопросы по тегам