Evaluación en Haskell con tiempo acotado

A veces es interesante evaluar expresiones en Haskell durante un tiempo limitado. Se puede conseguir usando la función timeout de la librería System.Timeout y la evaluate de la Control.Exception.

Vamos a mostrar su uso el siguiente ejemplo. En primer lugar, importamos las funciones

A continuación, definimos la función de Fibonacci

y la función acotada tal que (acotada t f x) calcula (f x) durante t microsegundos (1/10^6 segundos) y devuelve (Just (f x)) si encuentra su valor o Nothing en caso contrario.

Con acotada podemos realizar evaluaciones con tiempo limitado. Por ejemplo,

También se puede acotar con evaluate. Por ejemplo,

Esta entrada se basa en la consulta Haskell time limit on evaluation de StackOverflow.