Есть ли способ в Haskell проверить, прошла ли минута с предыдущего текущего времени? - PullRequest
2 голосов
/ 31 октября 2019

Я новичок в Haskell и пытаюсь настроить бота, который дает вам очки в зависимости от того, прошла ли минута

Я пытался найти способы получить текущее время и добавитьминуты поверх этого и проверяйте всякий раз, когда это будет равняться, когда прошла минута, например addUTCTime.

Как бы мне хотелось, чтобы это выглядело именно так

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

Я пришелпока безрезультатно, поэтому я надеюсь, что есть какой-то реальный способ сделать это. Я также все еще должен иметь дело с вещами IO все еще. Итак, вернемся к моему вопросу, есть ли способ проверить, прошла ли минута с текущего времени?

1 Ответ

7 голосов
/ 31 октября 2019

Это будет делать в основном то, что вы просите:

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!"
...