Từ GHC docs:
“nhấc” loại có nghĩa là về chủng loại mà bạn có thể xuống dưới.
loại "được đóng hộp" có nghĩa là giá trị được biểu thị bằng con trỏ đến đối tượng heap.
Một số hàm ý bao gồm:
- Một dỡ bỏ loại được đóng hộp (nhưng không nhất thiết phải là cách khác - hãy kiểm tra các liên kết trên để biết thêm)
- loại Hộp Bọc không thể có thunks (bởi vì đó là con trỏ dữ liệu cho bạn biết cách tạo ra giá trị), vì vậy không có sự lười biếng. Họ thực sự chỉ giữ giá trị. Điều này cũng có nghĩa là chúng có thể nhanh hơn.
- Tính đa hình không phát với các loại chưa được lọc. Bất cứ khi nào bạn thấy một biến kiểu, tất cả các loại liên quan đều chưa được sửa đổi. Một cái gì đó như
id 0 :: Int#
không hoạt động. Kiểm tra this answer để xem cách bạn có thể (kể từ khi GHC 8.0) đôi khi điều động xung quanh việc này.
Lưu ý rằng bạn có thể tạo ra sản phẩm unlifted trong GHC sử dụng MagicHash
và UnboxedTuples
phần mở rộng (mặc dù tôi không nghĩ rằng họ chơi tốt với GHCi):
{-# LANGUAGE MagicHash, UnboxedTuples #-}
extGCD :: Int -> Int -> (# Int, Int, Int #)
extGCD a 0 = (# 1, 0, a #)
extGCD a b = let (q, r) = a `quotRem` b
(# s, t, g #) = extGCD b r
in (# t, s - q * t, abs g #)
Ngoại trừ phần mở rộng này, Tôi tin rằng các loại duy nhất chưa được tìm thấy bạn sẽ tìm thấy là trong GHC.Exts
và là các loại nguyên thủy. Có một số thảo luận để cho phép các loại dữ liệu chưa được tùy chỉnh được tích hợp vào GHC here.
Một nhận xét cuối cùng: trong khi các loại được nâng lên có loại *
, các loại chưa được loại có loại #
. This answer cho câu hỏi được liên kết trong các nhận xét sẽ đi vào chi tiết hơn về điều này.
Câu hỏi liên quan: https://stackoverflow.com/questions/27095011/what-exactly-is-the-kind-in-haskell – danidiaz