[Haskell-cafe] Exposing a GADT-provided dictionary

Kosyrev Serge serge.kosyrev at iohk.io
Tue Oct 17 12:56:05 UTC 2017

On 10/17/2017 01:13 AM, Albert Y. C. Lai wrote:
> What is an example of how I would usually use withGADTDict?

The use case is accessing the dictionary in the context of a natural transformation,
during a free applicative traversal [1].  I.e. given:

> runAp_ :: Monoid m => (forall a. f a -> m) -> Ap f b -> m

..the 'GADT' type being the first argument for the 'Ap' type:

> data GADT a where
>  G1 :: HasDict a => a -> GADT a
>  -- ...

..and the extraction function:

> transform ∷ HasDict a => GADT a -> Result -- where 'Result' has a Monoid instance

..there needs to be a way to call 'transform' inside the natural transformation, the
first argument of 'runAp_', which 'withGADTDict' neatly fits:

> runAp_ (withGADTDict transform) someFreeAp

1. https://hackage.haskell.org/package/free-4.12.4/docs/Control-Applicative-Free.html#v:runAp_
с уважениeм / respectfully,
Kosyrev Serge

PGP Key ID: 3F62F118E38BED6D
“Most deadly errors arise from obsolete assumptions.”
  -- Frank Herbert, Children of Dune

More information about the Haskell-Cafe mailing list