2011-03-19 28 views
18

thể trùng lặp:
Haskell Weird Kinds: Kind of (->) is ?? -> ? -> *Trong GHCi, tại sao loại mũi tên chức năng `: loại (->)` bao gồm dấu hỏi `(->) :: ?? ->? -> * `?

Trong GHCi (phiên bản 7.0.2), nếu tôi yêu cầu cho các loại của các loại chức năng, kết quả có dấu hỏi:

Prelude> :kind (->) 
(->) :: ?? -> ? -> * 

Tại sao loại này bao gồm dấu chấm hỏi thay vì chỉ là dấu hoa thị * -> * -> *? Dấu hỏi có ý nghĩa gì? Tại sao các loại khác chỉ sử dụng dấu hoa thị?

Prelude> :kind (,) 
(,) :: * -> * -> * 
+1

IMO, tôi muốn nó nhiều hơn, nếu GHC chỉ hiển thị các ngữ cảnh mở rộng này nếu một pragma đặc biệt được cấp cho GHCi, vì chúng gây nhầm lẫn cho người mới bắt đầu. – fuz

+1

Xem thêm giải thích chi tiết hơn của Don Stewart [ở đây] (http://stackoverflow.com/questions/3034264/haskell-weird-kinds/3034295#3034295). –

Trả lời

16

Các loại ??? tham chiếu đến các tiện ích mở rộng GHC, các loại không được mở riêng. http://hackage.haskell.org/trac/ghc/wiki/IntermediateTypes có một sơ đồ thể hiện mối quan hệ giữa các loại mở rộng ? (tất cả các loại có thể), # (loại không có hộp bọc), ?? (đóng hộp hoặc bình thường loại không có hộp bọc - "nhất trên ràng buộc của #*"), (#) (tuples không có hộp bọc, mà chỉ có thể được sử dụng trong một số ít ngữ cảnh). (Loại tiêu chuẩn * là các loại đóng hộp thông thường.)

Các vấn đề liên quan