有谁知道有一个函数只允许一定的时间来执行函数。具有这样的类型签名的东西。
limited::Int->(a->b)->a->IO (Maybe b)
我想不出如何实现,也找不到。我问的原因是我要列出所有可能的Brainfuck程序,我想过滤掉那些花费太长时间的程序。
最佳答案
有a dedicated function来自 System.Timeout:
timeout :: Int -> IO a -> IO (Maybe a)
要按照您编写的方式使用,只需使用
limited t f x = timeout t $ do
let y = f x
y `seq` return y
请记住,Haskell 的惰性意味着任何值都是其他语言可能称之为“零参数的内存函数”的值,因此您实际上并不需要 (a->b) -> a ->
.
关于Haskell 评估时间限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20752083/