Haskell tem uma função de identidade que retorna a entrada inalterada. A definição é simples:
id :: a -> a
id x = x
Então, para se divertir, isso deve resultar 8
:
f = id id id id id id id id id id id id id id id id id id id id id id id id id id id
main = print $ f 8
Após alguns segundos (e cerca de 2 gb de memória de acordo com o Gerenciador de Tarefas), a compilação falha com ghc: out of memory
. Da mesma forma, o intérprete diz ghci: out of memory
.
Como id
é uma função muito simples, não esperaria que fosse uma carga de memória em tempo de execução ou tempo de compilação. Para que toda a memória está sendo usada?
id
s. No VIM, com o cursor sobre a definição def
, faça o seguinte::s/id id/id . id ./g
.