Có ít nhất hai ví dụ trong giấy bản thân:
"1. Giới thiệu" nói: "Ví dụ, chúng ta có thể để đảm bảo [tại thời gian biên dịch] rằng một cây đỏ-đen bị cáo buộc thực sự có tài sản màu đỏ đen ".
"2.1 Loại dữ liệu quảng cáo" thảo luận về vectơ được lập chỉ mục độ dài (có nghĩa là, vectơ có lỗi "lập chỉ mục thời gian biên dịch").
Bạn cũng có thể xem xét công việc trước đó theo hướng này, ví dụ: Thư viện HList cho các danh sách không đồng nhất loại an toàn và các bộ sưu tập có thể mở rộng. Oleg Kiselyov có nhiều công trình liên quan. Bạn cũng có thể đọc các tác phẩm về lập trình với các loại phụ thuộc. http://www.seas.upenn.edu/~sweirich/ssgip/main.pdf có các ví dụ giới thiệu cho các phép tính mức loại trong Agda, nhưng chúng cũng có thể được áp dụng cho Haskell.
Nói chung, ý tưởng là head
cho danh sách được cung cấp loại chính xác hơn. Thay vì
head :: List a -> a
nó là
head :: NotEmptyList a -> a
Chức năng đầu thứ hai là typesafe hơn fomer: nó không bao giờ có thể được áp dụng cho danh sách trống rỗng, vì nó sẽ gây ra lỗi biên dịch.
Bạn cần tính toán loại mức để thể hiện các loại như NotEmptyList. Gõ các lớp với các phụ thuộc chức năng, các nhóm GAGT và (được lập chỉ mục) đã cung cấp các dạng tính toán mức loại yếu cho haskell. Công việc bạn đề cập chỉ cần xây dựng thêm theo hướng này.
Xem http://www.haskell.org/haskellwiki/Non-empty_list để triển khai chỉ sử dụng các loại lớp Haskell98.
Đây là một câu hỏi hay. Một cách để xây dựng một câu trả lời tốt có thể là dịch các tệp mẫu bạn nhận được khi bạn "cài đặt cabal". Tôi có thể đăng SHE-code, như một bài tập cho người đọc: điều đó có hữu ích không? Tôi đang cố gắng cài đặt 7.4 ngay bây giờ, nhưng tôi đang chạy Leopard và tôi sợ một kết quả xấu. – pigworker
@pigworker, tôi đã cố gắng xem xét các ví dụ SHE và tôi nghĩ rằng tôi đã rên một số phần, nhưng một ví dụ SHE đơn giản với một chút "chú thích cho núm vú giả" có lẽ cũng rất tuyệt. – aleator