如何在do-block中使用睡眠和延迟功能?

lo *_*cre 1 haskell sleep compiler-errors delay

这确实不难找到答案,但是可惜我没有...我想在一个do块中延迟下一个执行步骤。我发现的功能 delaysleepnanosleepusleep

而且,这个问题也不涉及如何使用其中的任何一个:然而,请在Haskell中入睡

所有这些我都遇到了相同的错误,所以可能我从根本上做错了什么:

Variable not in scope: delay :: Integer -> IO a0

这是我的测试代码段:

main = do
  {
    putStrLn "line 1"
  ; delay 2
  ; putStrLn "line 2"
  }
Run Code Online (Sandbox Code Playgroud)

出于某种原因,Google搜索错误实际上并不会产生任何有用的信息。

For*_*Bru 6

好吧,您必须先导入Control.Concurrent

import Control.Concurrent

threadDelay 1000000 --sleep for a million microseconds, or one second
Run Code Online (Sandbox Code Playgroud)

  • 由于_type inference_,它知道类型。但是,带有_required_签名的函数不存在,因此会出现错误消息。然后,“延迟”功能是非标准的,您需要安装一个名为“ concurrent-extra”的第三方软件包,如链接所示。然后,您导入Control.Concurrent.Thread.Delay,就是这样。我不确定为什么需要特定的功能,因为threadDelay是在Haskell中暂停程序执行的标准方法。 (6认同)