Proposal: Simplify/Generalize Data.Dynamic

John Lato jwlato at gmail.com
Mon Aug 25 22:46:55 UTC 2014


+1, and +1 for exposing the constructor.  If we implemented Dynamic from
scratch today this is what it would look like, so let's get rid of the old
cruft!

John L.


On Mon, Aug 25, 2014 at 11:15 PM, Edward Kmett <ekmett at gmail.com> wrote:

> I'd like to propose a cleanup to the API of Data.Dynamic.
>
> By way of (partial) motivation, a couple of years back Lennart posed a
> question on stackoverflow
> <http://stackoverflow.com/questions/10889682/how-to-apply-a-polymorphic-function-to-a-dynamic-value/10890414#comment39759480_10890414>
> about how to use Dynamic to implement
>
> apD :: forall f. Typeable1 f =>
>   (forall a. a -> f a) -> Dynamic -> Dynamic
>
>
> At the time, I offered a solution that is no longer applicable in a world
> with polykinded Typeable.
>
> But, if we change the definition of Data.Dynamic to
>
> data Dynamic where
>   Dynamic :: Typeable a => a -> Dynamic
>
> from its current magic implementation in terms of unsafeCoerce and a
> manually held typeRep, then
>
> fromDynamic becomes a trivial application of Data.Typeable.cast and
> dynApply becomes easier,
>
> This would enable us to implement Data.Dynamic with its full constructor
> exposed without losing safety.
>
> In lieu of supplying the constructor, we could offer a form of
>
> withDyn :: Dynamic -> (forall a. Typeable a => a -> r) -> r
>
> but I'd rather expose the constructor rather than needlessly Church encode
> as the kind of code/user that needs this is the kind that would bemoan
> needless performance barriers in the name of nebulous encapsulation
> benefits.
>
> Now it becomes possible to write code that does polymorphic things
> underneath the Dynamic wrapper, such as Lennart's example once more, but
> now in a principled way.
>
> Discusssion Period: 2 Weeks
>
> *tl;dr* polykinded Typeable took away some power from the users of
> Data.Dynamic, which we can give back in a more principled way,
> simplifying the API as a result.
>
> -Edward
>
> _______________________________________________
> Libraries mailing list
> Libraries at haskell.org
> http://www.haskell.org/mailman/listinfo/libraries
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/libraries/attachments/20140826/21fe11a1/attachment.html>


More information about the Libraries mailing list