Haskell có một chức năng nhận dạng trả về đầu vào không thay đổi. Định nghĩa rất đơn giản:
id :: a -> a
id x = x
Vì vậy, để giải trí, điều này sẽ xuất ra 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
Sau một vài giây (và khoảng 2 gb bộ nhớ theo Trình quản lý tác vụ), quá trình biên dịch không thành công với ghc: out of memory
. Tương tự, thông dịch viên nói ghci: out of memory
.
Vì id
là một chức năng khá đơn giản, tôi sẽ không mong đợi nó trở thành gánh nặng về bộ nhớ trong thời gian chạy hoặc thời gian biên dịch. Tất cả bộ nhớ đang được sử dụng để làm gì?
id
đó. Trong VIM, với con trỏ vào định nghĩa củaf
, làm như sau::s/id id/id . id ./g
.