私はハスケルのwikiの本を経由しています。GADTS種類署名
https://en.wikibooks.org/wiki/Haskell/GADTガイドです。
コンスコンストラクタの制約付きタイプを一般化するKindシグネチャが追加されるまで、かなりうまくトラッキングしていました。私は安全と危険の両方MarkedListsに対して構築する短所コンストラクタを使用してパターンマッチすることができます種類の署名で
data Safe
data NotSafe
data MarkedList :: * -> * -> * where
Nil :: MarkedList t NotSafe
Cons :: a -> MarkedList a b -> MarkedList a c
safeHead :: MarkedList a Safe -> a
safeHead (Cons x _) = x
silly 0 = Nil
silly 1 = Cons() Nil
silly n = Cons() $ silly (n-1)
。私は何が起こっているのか理解していますが、残念なことに、Kind Signatureがこれをどのように許可しているかについての直感を築くのは難しいです。なぜ私はKind Signatureが必要なのですか?カインドシグネチャは何をしていますか?
イムまだ混乱して... '動作しているようです' MarkedList AB以来GHC 7.4.1でも同様です。私はその種の署名が何を提供しているのか分かりません。 – ExternalReality
それは私に同じことを言っている別の方法のように見えます。 –
はい、Kind Signatureは言語プラグマが必要ですが、後者は必要ありません。なぜ、両方の方法が同じであれば?カインドシグネチャーは何を追加で提供しますか? – ExternalReality