просто:)
Вот инстансы MonadTime - https://hackage.haskell.org/package/monad-time-0.3.1.0/docs/src/Control.Monad.Time.html#currentTime
Я написал вот такой код и ожидаю что внтури ридера у меня currentTime будет всегда константный, но из-за того что там IO смешан с редиром - currentTime каждый раз возвращает новое время. Мог бы кто-то обьяснить как это возможно поправить?
f :: (MonadTime m, MonadIO m) => m ()
f = do
now <- currentTime
flip runReaderT now $ f2
print now
f2 :: (MonadTime m, MonadIO m) => m ()
f2 = do
now2 <- currentTime
putStrLn $ show now2
liftIO $ threadDelay (2000000)
now3 <- currentTime
putStrLn $ show now3
liftIO $ threadDelay (2000000)
now4 <- currentTime
putStrLn $ show now4
не понял. А как там print / putStrLn вызываются, если все в MonadIO, а не в IO происходит?
Обсуждают сегодня