ScopedTypeVariables

ScopedTypeVariables 允許你在宣告中引用通用量化型別。更明確一點:

import Data.Monoid

foo::forall a b c. (Monoid b, Monoid c) => (a, b, c) -> (b, c) -> (a, b, c)
foo (a, b, c) (b', c') = (a::a, b'', c'')
    where (b'', c'') = (b <> b', c <> c') :: (b, c)

重要的是我們可以使用 abc 來指示編譯器宣告的子表示式(where 子句中的元組和最終結果中的第一個 a)。在實踐中,ScopedTypeVariables 協助將複雜函式編寫為部分之和,允許程式設計師將型別簽名新增到沒有具體型別的中間值。