Giả sử chúng ta định nghĩa một GADT để so sánh các loại:Runtime so sánh các loại cho nâng cấu trúc dữ liệu đa hình thành GADTs
data EQT a b where
Witness :: EQT a a
là nó sau đó có thể tuyên bố một hàm eqt với chữ ký loại sau đây:
eqt :: (Typeable a, Typeable b) => a -> b -> Maybe (EQT a b)
... mà eqt xy đánh giá để Chỉ cần chứng nếu typeof x == t ypeOf y --- và cách khác là Không có gì?
Chức năng eqt sẽ giúp bạn có thể nâng cấu trúc dữ liệu đa hình thông thường thành GADT.
Thật gọn gàng! Cảm ơn. –
Được đóng gói an toàn miễn là không ai tạo ra một phiên bản 'Data.Typeable' không chính xác trên một thứ gì đó. ('deriving Typeable' luôn an toàn.) –
Lưu ý rằng những ngày này' eq' có sẵn trong mô-đun 'Data.Typeable' là [' eqT'] (https://hackage.haskell.org/package/base-4.9) .0.0/docs/Data-Typeable.html # v: eqT) –