Haskell中是否有一种方法可以检查自上一个当前时间起是否过去了一分钟?

问题描述 投票:0回答:1

我是Haskell的新手,我正在尝试建立一个机器人,该机器人可以根据是否经过一分钟为您提供分数

我已经尝试寻找获取当前时间并在其上添加一分钟的方法,并检查经过一分钟的时间是否相等,例如addUTCTime。

我希望它看起来像这样

if(timeNow == timeInAMinute) then sendMsg ("You got a point added!") else return ()

我现在仍然无济于事,所以我希望有一些实际的方法可以解决这个问题。我还仍然必须处理IO方面的问题。回到我的问题,有没有办法检查当前时间是否已经过去一分钟?

haskell time functional-programming equality
1个回答
1
投票

这基本上可以满足您的要求:

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!"
© www.soinside.com 2019 - 2024. All rights reserved.