Temporizando funções puras

Como posso "matar" um cálculo puro que está demorando demais? eu tentei

import System.Timeout

fact 0 = 1
fact n = n * (fact $ n - 1)

main = do maybeNum <- timeout (10 ^ 7) $ (return . fact) 99999999
          print maybeNum

No entanto, isso não funciona. Substitua o(return . fact) 99999999&nbsp;com uma função IO "real" comogetLine&nbsp;e isso funciona como esperado.