[prev in list] [next in list] [prev in thread] [next in thread] 

List:       haskell-cafe
Subject:    [Haskell-cafe] Re: Typeclasses and GADT [Was: Regular Expressions
From:       Tomasz Zielonka <tomasz.zielonka () gmail ! com>
Date:       2005-10-27 6:05:23
Message-ID: 2bb2bdb40510262305rf5e0668s2b82371b2caca3d4 () mail ! gmail ! com
[Download RAW message or body]

On 10/27/05, oleg@pobox.com <oleg@pobox.com> wrote:
>
> Tomasz Zielonka wrote:
>
> > Speaking about casts, I was playing with using GADTs to create a
> > non-extensible version of Data.Typeable and Data.Dynamic.
> > I wonder if it's possible to write such a thing without GADTs (and
> > unsafeCoerce, which is used in Data.Dynamic, IIRC).
>
> Absolutely. Stephanie Weirich did that back in 2000 (actually, earlier:
> her paper, TypeSafe cast was presented at ICFP'00). The code does not
> use existentials -- only universals. BTW, if you don't plan to store
> your dynamics in a data structure (or plan to cast them to the same
> thing), then no explicit quantification is needed and the code becomes
> Haskell98. Here's her code for the cast, with slight
> embellishments.

This is cool! I thought that even if it was possible, the code would
be longer and less readable. It isn't.

I'm not sure I would be able to do everything I need to do
with this implementation of Dynamic (because I have some
other operations on Type), but I guess the answer is
True.

I've known about this paper, but I haven't read it yet. That was
a mistake :-)

> It should be pointed out that we can cast polymorphic
> lists and polymorphic functions.

I'm not sure I understand correctly, but I don't think you can
(toDyn const) and get a polymorhic function back from fromDyn.
I checked and I got an ambiguity error. Can you show an example?

> There is a different way to perform casting within a closed universe,
> see
>         http://www.mail-archive.com/haskell@haskell.org/msg13089.html

I'll check it out.

Best regards
Tomasz

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic