[Haskell-cafe] Re: [Haskell] How to define tail function for Even/Odd GADT lists?

David Roundy daveroundy at gmail.com
Wed Apr 23 20:07:18 EDT 2008


I presume the point was to allow the writing of functions that accept
either list type, such as

sort :: List a evenorodd -> List a evenorodd

or similar.

David

On Wed, Apr 23, 2008 at 7:55 PM, Iavor DiIatchki
<iavor.diatchki at gmail.com> wrote:
> Hello,
>  I am not sure of the use case here but you could also do the following:
>
>  data EvenList a = Nil
>                 | ConsE a (OddList a)
>
>  data OddList a  = ConsO a (EvenList a)
>
>  This does not use any type system extensions.
>
>  -Iavor
>
>
>
>  On Wed, Apr 23, 2008 at 4:46 PM, David Roundy <daveroundy at gmail.com> wrote:
>  > 2008/4/23 Martijn Schrage <martijn at cs.uu.nl>:
>  >
>  > >  It depends a bit on what you want to use these lists for, but the following
>  >  > encoding works for your examples and doesn't need the type class.
>  >  >
>  >  > data E
>  >  >  data O
>  >  >
>  >  >  type Even = (E,O)
>  >  >  type Odd  = (O,E)
>  >
>  >  That's a nice little trick!  I like how you achieve type signatures
>  >  relating two distinct types just by sticking them in a tuple.  :)
>  >
>  >  David
>  >  _______________________________________________
>  >  Haskell-Cafe mailing list
>  >  Haskell-Cafe at haskell.org
>  >  http://www.haskell.org/mailman/listinfo/haskell-cafe
>  >
>


More information about the Haskell-Cafe mailing list