haskell中,会对特定的form进行缓存。从而产生出了一些使用无穷列表等方案的技巧,用于缓存运行结果。避免重复计算。最典型的例子就是斐波那契数。

几个参考:wiki: memoising Constant Applicative Form(caf) The Fibonacci Sequence let and where eta conversion fix and recursion

简单来说,就是符合caf的形式,在其执行时,会根本不同的情况对其值进行缓存。比如无穷列表的map会对列表进行缓存,这里主要是使用一个叫Float bindings outwards的东西,这是什么我也没查一,只知道ghc里面有一个FloatOut模块是用来做这个的。

如果不依赖caf,可以参考上面wiki的方法,使用各种trick进行缓存记录。