文字列を取得して文字列を評価するircボットで使用する小さなプログラムを作成しています。このために、私はヒントパッケージを使用しています。これは私のニーズに非常に適しています。私が今抱えている問題は、2^1000000000などの計算に時間がかかる式の評価を防ぎたいということです。
System.Timeoutパッケージを次のように使用してみました。
import Data.Maybe
import Language.Haskell.Interpreter
import System.Timeout
import System.Environment (getArgs)
main :: IO()
main = do
r <- timeout 500000 $ runInterpreter $ hEval arg
case r of
Nothing -> putStrLn "Timed out!"
Just x ->
case x of
Left err -> putStrLn (show err)
Right a -> putStrLn a
hEval e = do
setImportsQ [("Prelude", Nothing),("Data.List",Nothing)]
a <- eval e
return $ take 200 a
しかし、それは機能していません。何も評価できないほど短い時間を入れない限り、タイムアウトは発生しません。Timeoutパッケージのページで、一部のモジュールで問題が発生する可能性があり、テーマを終了させる必要があることを読みましたが、ヒントがそのようなモジュールであるかどうかを知るには十分ではありません。
したがって、これが機能しないことを私に伝えるだけであっても、これに関する助けをいただければ幸いです。