2013-08-26 5 views
6

Ich habe gesehen, dass es in den neuesten Versionen von GHC Unterstützung für Typenlisten gibt. Allerdings muss ich mit Typ-Level-Sets für eine Anwendung arbeiten und möchte eine Set-Level-Set-Bibliothek basierend auf Typ-Level-Listen implementieren. Aber ich weiß nicht, wo :(Type-Level-Sets in Haskell/Agda

zu starten Gibt es eine Bibliothek unterstützt Typ-Level-Sets in Haskell

+0

Nun die verschiedenen erweiterbaren Record-Bibliotheken geben Sie Set-ish-Operationen (Union, überprüfen, ob eine Bezeichnung im Datensatz ist), sogar Wenn die Implementierung keine Struktur wie Data.Set ist. Schau dir die Liste oder andere Teile auf dieser Seite an. – aavogt

+0

Es gibt jetzt [eine Bibliothek] (https://hackage.haskell.org/package/type-level-sets), die dies bereitstellt. –

Antwort

2

Sie HSet Eigenschaft für HList ‚s aus HList Paket verwenden kann:?

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

für die Arbeit mit anderen Typen müssen Sie HEq Instanzen für sie schreiben ..