2016-06-02 1 views
2

Я пытаюсь распечатать текущее время после каждой строки, оцененной в 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 

т.д.

ответ

2
timePrint a = do 
    s <- getTime 
    putStrLn $ show a ++ "\n" ++ s 

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

+0

Другими словами, <- - запустить действие IO и превратить его в (в данном случае) строку? – masterchefsenior

+1

@masterchefsenior точно! – Franky

Смежные вопросы