Haskellでは問題ないね。

> memoize cache fib
は多相だからだめなんでないか?
> この制限を値多相(value polymorphism)と呼ぶ.値多相に制限しなければならない理由は副作用(7章参照)をもつ言語機構と深く関係があるのだが,ここでは説明しない.
...
> このように,関数を計算する式(ここでの double double)に fun x -> ... x をつけて値とするような(プログラムの)変換を η-展開(η-expansion)という.
http://www.sato.kuis.kyoto-u.ac.jp/~igarashi/class/isle4/mltext/ocaml005.html