6
最新版のGHCでは、タイプレベルのリストがサポートされています。しかし、私はアプリケーションの型レベルセットを扱う必要があり、型レベルのリストに基づいて型レベルのセットライブラリを実装したいと考えています。しかし、私はHaskellでタイプレベルのセットをサポートしている任意のライブラリがあります:(Haskell/Agdaのタイプレベルセット
を開始する場所を知らない
が最新版のGHCでは、タイプレベルのリストがサポートされています。しかし、私はアプリケーションの型レベルセットを扱う必要があり、型レベルのリストに基づいて型レベルのセットライブラリを実装したいと考えています。しかし、私はHaskellでタイプレベルのセットをサポートしている任意のライブラリがあります:(Haskell/Agdaのタイプレベルセット
を開始する場所を知らない
があなたはHListパッケージからHList年代のためHSetプロパティを使用することができます?
{-# 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)
他のタイプの作業には、HEqのインスタンスを書く必要があります。
さまざまな拡張可能なレコードライブラリは、set-ish操作(union、ラベルがレコード内にあるかどうかの確認)、さらには実装がData.Setのようなツリーでない場合リスト、またはそのページの他のビットをチェックしてください。 –
aavogt
これを提供する[ライブラリ](https://hackage.haskell.org/package/type-level-sets)があります。 –