하스켈 위키 책을 통해 가고 있습니다. GADTS친절한 서명
https://en.wikibooks.org/wiki/Haskell/GADT 가이드.
Cons 생성자의 제한된 유형을 일반화하는 Kind 서명이 추가 될 때까지 나는 꽤 잘 추적하고있었습니다.
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를 사용하여 안전 및 안전하지 않은 MarkedLists에 대해 일치 및 패턴 일치를 생성 할 수 있습니다. 무슨 일이 벌어지고 있는지 이해하는 동안 나는 불행히도 친절한 서명이 이것을 어떻게 허용하는지에 대한 직관을 구축하는 데 어려움을 겪고 있습니다. 왜 나는 친절한 서명이 필요한가요? Kind Signature는 무엇을하고 있습니까?
은 ...'작동하는 것 같다
GHC 7.4.1에서도 마찬가지입니다. 친절한 서명이 무엇인지 모르겠습니다. – ExternalReality그건 나에게 똑같은 말을하는 대체 방법처럼 보입니다. –
예.하지만, 친절한 서명에는 언어 pragma가 필요하지만 후자는 필요하지 않습니다. 왜, 두 방법이 같은 경우? 친절한 서명은 무엇을 제공합니까? – ExternalReality