为什么Haskell的“无所事事”的function,ID,消耗大量的内存?
Haskell有一个标识函数,它返回的input不变。 定义很简单:
id :: a -> a id x = x  所以为了好玩,这应该输出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 
 几秒钟后(根据任务pipe理器大约2GB的内存),编译失败, ghc: out of memory 。 同样,口译员说ghci: out of memory 。 
 由于id是一个非常简单的函数,我不希望它在运行时或编译时成为内存负担。 什么是所有使用的内存? 
 我们知道id的types, 
 id :: a -> a 
 而当我们专注于id id , 左边的id副本的types是: 
 id :: (a -> a) -> (a -> a) 
 然后,当您再次为id id id最左侧的id专门化时,您将得到: 
 id :: ((a -> a) -> (a -> a)) -> ((a -> a) -> (a -> a)) 
 所以你看到你添加的每个id ,最左边id的types签名是两倍大。 
请注意,在编译过程中types会被删除,所以这只会占用GHC中的内存。 它不会在你的程序中占用内存。