7.21. 単相性の制御

letおよびwhere束縛での一般化の扱いに関わるフラグが二つある。

7.21.1. 恐怖の単相性限定を無効にする

Haskellの単相性限定(Haskellレポートの4.5.5節(和訳)を見よ)は、-XNoMonomorphismRestrictionで完全に無効にできる。

7.21.2. 単相的パターン束縛

実験的な変更として、我々はパターン束縛を単相的にする可能性を探っている。単相的というのは、全く一般化されないということである。パターン束縛とは、左辺に関数引数がなく、かつ、左辺が単純な変数でないものである。例を示す。

  f x = x                    -- パターン束縛ではない
  f = \x -> x                -- パターン束縛ではない
  f :: Int -> Int = \x -> x  -- パターン束縛ではない

  (g,h) = e                  -- パターン束縛
  (f) = e                    -- パターン束縛
  [x] = e                    -- パターン束縛

実験的に、GHCはデフォルトでパターン束縛を単相的にする。標準の振る舞いに戻すには-XNoMonoPatBindsを使うこと。