2013-08-26 28 views
6

En son GHC sürümlerinde, tür düzeyinde listeler için destek olduğunu gördüm. Bununla birlikte, bir uygulama için tip seviye kümeleriyle çalışmam ve tip düzeyindeki listelere dayanan bir tür düzey kitaplığı uygulamak istiyorum. Ama Haskell tip düzey setlerini destekleyen herhangi bir kütüphane var :(Haskell/Agda'da tip düzeyindeki ayarlar

nereden başlayacağınızı bilmiyorsanız

+0

Çeşitli genişletilebilir kayıt kitaplıkları size set-ish işlemleri (birleşim, bir etiketin kayıtta olup olmadığını kontrol etme) sağlar. Uygulama Data.Set gibi bir ağaç değilse. veya bu sayfadaki diğer bitlere göz atın. – aavogt

+0

Şimdi bunu sağlayan [kütüphane] (https://hackage.haskell.org/package/type-level-sets) var. –

cevap

2

Sen HList paketinden HList 's için HSet özelliğini kullanabilirsiniz:?

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

Diğer türleri ile çalışmak için HEq örneklerini yazmanız gerekir.