2013-08-26 24 views
6

Widziałem, że w najnowszych wersjach GHC istnieje wsparcie dla list na poziomie typu. Muszę jednak pracować z zestawami poziomów typu dla aplikacji i chciałbym wdrożyć bibliotekę zestawów poziomów na podstawie list na poziomie typu. Ale nie wiem od czego zacząć :(Zestawy poziomów w Haskell/Agda

Czy istnieje biblioteka wspiera zestawów typu szczebla w Haskell

+0

Cóż, rozszerzalne biblioteki rekordów dają set-owskie operacje (połączenie, sprawdzanie, czy etykieta znajduje się w rekordzie), nawet jeśli implementacja nie jest drzewem takim jak Data.Set. Sprawdź listę lub inne bity na tej stronie. – aavogt

+0

Istnieje teraz [biblioteka] (https://hackage.haskell.org/package/type-level-sets), która to zapewnia. –

Odpowiedz

2

Można użyć HSet nieruchomość za HList „s od HList pakietu:

{-# 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) 

do pracy z innymi typami należy napisać dla nich instancje HEq.