@hackage composite-dhall0.0.3.0

Dhall instances for composite records.

composite-dhall

ToDhall and FromDhall instances for composite records.

You can deserialise a normal dhall record such as

{ a = "foo"
, b = +5 }

using a Record like:

withLensesAndProxies
  [d|
    type A = "a" :-> Text

    type B = "b" :-> Int
    |]

type MyRec = Record '[A, B]

Similarly you can use a contravariant function as the base functor to parse a collection of templates for different types.

{ a = \(x : Text) -> "Hello ${x}."
, b = \(y : Integer) -> "You are ${Integer/show y} years old."
}

We use a DerivingVia to avoid overlapping instances in composite:

newtype Template a = Template (Op Text a)
  deriving newtype (FromDhall)

newtype Templates = Templates {unTemplates :: Rec Template '[A, B]}
  deriving (FromDhall) via (Rec (Op Text) '[A, B])