packages feed

fcf-composite-0.1.0.0: README.md

# 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`.