letおよびwhere束縛での一般化の扱いに関わるフラグが二つある。
Haskellの単相性限定(Haskellレポートの4.5.5節(和訳)を見よ)は、-XNoMonomorphismRestriction
で完全に無効にできる。
実験的な変更として、我々はパターン束縛を単相的にする可能性を探っている。単相的というのは、全く一般化されないということである。パターン束縛とは、左辺に関数引数がなく、かつ、左辺が単純な変数でないものである。例を示す。
f x = x -- パターン束縛ではない f = \x -> x -- パターン束縛ではない f :: Int -> Int = \x -> x -- パターン束縛ではない (g,h) = e -- パターン束縛 (f) = e -- パターン束縛 [x] = e -- パターン束縛
実験的に、GHCはデフォルトでパターン束縛を単相的にする。標準の振る舞いに戻すには-XNoMonoPatBinds
を使うこと。