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