2013-08-26 25 views
6

Tôi đã thấy rằng trong các phiên bản mới nhất của GHC có hỗ trợ cho danh sách cấp loại. Tuy nhiên, tôi cần phải làm việc với các bộ mức loại cho một ứng dụng và muốn triển khai một thư viện tập hợp kiểu cấp dựa trên các danh sách mức loại. Nhưng tôi không biết bắt đầu từ đâu :(Bộ loại mức trong Haskell/Agda

Có bất kỳ thư viện hỗ trợ bộ gõ cấp trong Haskell

+0

Các thư viện bản ghi có thể mở rộng khác nhau cung cấp cho bạn các hoạt động set-ish (union, kiểm tra xem nhãn có trong hồ sơ) hay không nếu việc thực hiện không phải là một cây như Data.Set. Kiểm tra danh sách hoặc các bit khác trên trang đó. – aavogt

+0

Hiện có [thư viện] (https://hackage.haskell.org/package/type-level-sets) cung cấp thông tin này. –

Trả lời

2

Bạn có thể sử dụng tài sản cho HSetHList 's từ HList gói:

{-# LANGUAGE FlexibleInstances #-} 

import Data.HList 

class (HList l, HSet l) => ThisIsSet l where 
    -- Here we have @[email protected] which is @[email protected] _and_ @[email protected] 
    test :: l 

-- This is ok: 

instance ThisIsSet HNil where 
    test = hNil 

-- And this: 

instance ThisIsSet (HCons HZero HNil) where 
    test = hCons hZero hNil 

-- And this (HZero != HSucc HZero): 

instance ThisIsSet (HCons HZero (HCons (HSucc HZero) HNil)) where 
    test = hCons hZero (hCons (hSucc hZero) hNil) 

-- This is an error since HSucc HZero == HSucc HZero: 

instance ThisIsSet (HCons (HSucc HZero) (HCons (HSucc HZero) HNil)) where 
    test = hCons (hSucc hZero) (hCons (hSucc hZero) hNil) 

để làm việc với các loại khác, bạn cần viết HEq trường hợp cho chúng.

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