Самый простой обходной путь - форсировать оценку с помощью аннотаций строгости.
{-# LANGUAGE BangPatterns #-}
Затем форсируйте распределение, просто сделав a
строгим, используя !
("взрыв").
let !a = listArray (0, 1000) [x ..]
В качестве альтернативы, если вы работаете в монаде IO
, аннотации строгости могут не всегда помогать. Для принудительного вычисления выражения перед выполнением какого-либо действия IO
вы можете использовать evaluate
. Например:
let a = listArray (0, 1000) [x ..]
evaluate a