[Haskell-cafe] Dynamic and equality

Carter Schonwald carter.schonwald at gmail.com
Sat Jul 20 06:31:23 CEST 2013


the tricky part then is to add support for other types.

another approach to existentially package type classes with the data type!

eg
data HasEq  = forall a . HasEq ( Eq a => a)
or its siblinng
data HasEq a = Haseq (Eq a => a )

note this requires more planning in how you structure your program, but is
a much more pleasant approach than using dynamic when you can get it to
suite your application needs.

note its also late, so I've not type checked these examples ;)

-Carter



On Fri, Jul 19, 2013 at 12:54 PM, adam vogt <vogt.adam at gmail.com> wrote:

> On Fri, Jul 19, 2013 at 5:19 AM, Jose A. Lopes <jabolopes at google.com>
> wrote:
> > Hello,
> >
> > How to define equality for Data.Dynamic ?
>
> Hi Jose,
>
> You could try casting the values to different types that do have an
> (==). You can treat the case where you have the types matching, but
> didn't list that type beforehand differently.
>
>
> eqTys a b
>     | Just a' <- fromDynamic a, Just b' <- fromDynamic b = a' == (b' ::
> Int)
>     | Just a' <- fromDynamic a, Just b' <- fromDynamic b = a' == (b' ::
> Integer)
>     | show a == show b = error "equal types, but don't know if there's an
> (==)!"
>     | otherwise = False
>
>
> {-
>
> > eqTys (toDyn 4) (toDyn 5)
> False
>
> > eqTys (toDyn 4) (toDyn 4)
> True
>
> > eqTys (toDyn 4) (toDyn 4.5)
> False
>
> > eqTys (toDyn 4.5) (toDyn 4.5)
> *** Exception: equal types, but don't know if there's an (==)!
>
> -}
>
>
> --
> Adam
>
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/haskell-cafe/attachments/20130720/e8691b88/attachment.htm>


More information about the Haskell-Cafe mailing list