@hackage fcf-composite0.1.0.0

Type-level computation for composite using first-class-families.

fcf-composite

Fcf support for composite records. This gives bidirection between a composite style [s :-> a] and MapC s a from fcf-containers.

Using this we can compute record types via the Map operations in Fcf.

data Difference :: [Type] -> [Type] -> Exp [Type]

type instance Eval (Difference xs ys) = Eval (ToComposite =<< Fcf.Data.MapC.Difference (Eval (FromComposite xs)) (Eval (FromComposite ys)))

type A = ["a" :-> Int, "b" :-> String, "c" :-> ()]

type B = ["a" :-> Int, "c" :-> ()]

myRec :: Record (Eval (Difference A B))
myRec = "foo" :*: RNil -- checks!

Note: Since ToComposite and FromComposite use ToList and FromList from Fcf.Data.MapC, then the fields will always be returned in alphabetical order according to the symbol name, so you may need to use rcast.