Tôi đang xem qua sổ Haskell wiki GADTSChữ ký Loại
https://en.wikibooks.org/wiki/Haskell/GADT hướng dẫn.
Tôi đã theo dõi khá tốt cho đến khi chữ ký Kind được thêm vào, khái quát hóa loại ràng buộc của hàm tạo Cons.
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)
Với chữ ký loại Tôi có thể sử dụng hàm tạo tiêu chuẩn để xây dựng và khớp mẫu với cả Đánh dấu an toàn và không an toàn. Trong khi tôi hiểu những gì đang xảy ra, tôi không may gặp khó khăn trong việc xây dựng bất kỳ trực giác nào về cách Chữ ký Kind cho phép điều này. Tại sao tôi cần Chữ ký Loại? Chữ ký Kind là gì?
Im vẫn bối rối vì 'MarkedList ab nơi ... 'dường như làm việc trong GHC 7.4.1. Tôi không chắc chắn chữ ký loại cung cấp. – ExternalReality
Điều đó giống như một cách khác để nói cùng một điều với tôi. –
Có, nhưng Chữ ký Loại cần pragma ngôn ngữ trong khi chữ cái thứ hai thì không. Tại sao, nếu cả hai cách đều giống nhau? Chữ ký loại bổ sung cung cấp thêm những gì? – ExternalReality