haskell - 使用非 IO 函数 haskell 超时
问题描述
我的函数fun1
不是 IO 并且计算量很大,所以我想运行它最多指定的秒数。我找到了一个函数timeout
,但它要求这个fun1
是IO
。
timeout :: Int -> IO a -> IO (Maybe a)
我该如何规避这个问题,或者有更好的方法来实现我的目标?
编辑:我修改了第一句fun1
是 NOT IO
,它是 type fun1 :: Formula -> Bool
。
解决方案
接近talex
所说的除了移动seq
应该工作。这是一个使用低效率fib
作为昂贵计算的示例。
Prelude> import System.Timeout
Prelude System.Timeout> :{
Prelude System.Timeout| let fib 0 = 0
Prelude System.Timeout| fib 1 = 1
Prelude System.Timeout| fib n = fib (n-1) + fib (n-2)
Prelude System.Timeout| :}
Prelude System.Timeout> timeout 1000000 (let x = fib 44 in x `seq` return x)
Nothing
Prelude System.Timeout>
推荐阅读
- javascript - ajax 和 php 文件从输入上传未定义的索引
- jquery - jQuery令牌输入不显示数据标签rails
- snmp - 我可以将 SNMP 陷阱发送到不同的网络吗?
- c - 如何判断当前目录是否是 C 中的根目录?
- javascript - Map、findIndex 和 filter 组合
- c# - 根据列表框是否为空,使用 sql 插入行
- vba - 如何使用 VBA 在 Excel 注释中查找和替换日期格式
- python - 除 ValueError 外的 elif
- angular - 进口 angular/core 和 angular/cli 之间的区别
- java - 如何在 jar 中使用主类进行火花提交?