Haskell 中有没有办法检查自上一个当前时间以来是否已经过了一分钟?
Is there a way in Haskell to check if a minute has passed since the previous current time?
我是 Haskell 的新手,我正在尝试设置一个机器人,它会根据一分钟过去了给你积分
我尝试寻找获取当前时间的方法,并在此基础上添加一分钟,并在一分钟过去后检查时间是否相等,例如 addUTCTime。
我希望它看起来像这样
if(timeNow == timeInAMinute) then sendMsg ("You got a point added!") else return ()
我目前还无济于事,所以我希望有一些实际的方法可以解决这个问题。我也仍然需要处理 IO 的东西。回到我的问题,有没有办法检查当前时间是否过了一分钟?
这基本上可以满足您的要求:
import Data.Time
main :: IO ()
main = do
t0 <- getCurrentTime
go t0
where go tl = do
t <- getCurrentTime
if t >= 60`addUTCTime`tl
then do
putStrLn "You got a point!"
go t
else go tl
当然,递归循环中的这种忙碌等待并不是很有效。一个更简单更好的解决方案就是
import Control.Concurrent (threadDelay)
import Control.Monad (forever)
main :: IO ()
main = forever $ do
threadDelay $ 60 * 10^6
putStrLn "You got a point!"
我是 Haskell 的新手,我正在尝试设置一个机器人,它会根据一分钟过去了给你积分
我尝试寻找获取当前时间的方法,并在此基础上添加一分钟,并在一分钟过去后检查时间是否相等,例如 addUTCTime。
我希望它看起来像这样
if(timeNow == timeInAMinute) then sendMsg ("You got a point added!") else return ()
我目前还无济于事,所以我希望有一些实际的方法可以解决这个问题。我也仍然需要处理 IO 的东西。回到我的问题,有没有办法检查当前时间是否过了一分钟?
这基本上可以满足您的要求:
import Data.Time
main :: IO ()
main = do
t0 <- getCurrentTime
go t0
where go tl = do
t <- getCurrentTime
if t >= 60`addUTCTime`tl
then do
putStrLn "You got a point!"
go t
else go tl
当然,递归循环中的这种忙碌等待并不是很有效。一个更简单更好的解决方案就是
import Control.Concurrent (threadDelay)
import Control.Monad (forever)
main :: IO ()
main = forever $ do
threadDelay $ 60 * 10^6
putStrLn "You got a point!"