# fcf-composite Fcf support for [composite](https://hackage.haskell.org/package/composite-base) records. This gives bidirection between a composite style `[s :-> a]` and `MapC s a` from [fcf-containers](https://hackage.haskell.org/package/fcf-containers). Using this we can compute record types via the Map [operations](https://hackage.haskell.org/package/fcf-containers-0.6.0/docs/Fcf-Data-MapC.html) in Fcf. ```{.haskell} 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`.