[Haskell-cafe] The difficulty of designing a sequence class

David Menendez zednenem at psualum.com
Mon Jul 31 18:35:04 EDT 2006


ajb at spamcop.net writes:

> G'day all.
> 
> Quoting Robert Dockins <robdockins at fastmail.fm>:
> 
> > I've considered reformulating the Sequence class to be more similar
> > to the Collection classes (which use MPTCs, fundeps and mention the
> > element type),
> 
> The redesign of the Collection hierarchy was from my tree.  The main
> reason why I changed it was that ternary tries couldn't really be
> typed properly.  (Chris' implementation of Patricia trees used a
> phantom key type along with a stern warning to only define the Int
> instance.  That didn't work for ternary tries, since the key type is
> polymorphic.)
> 
> I didn't get around to fixing Sequence because there wasn't a need for
> it yet, but yes, it should be done.

That's a tough call to make. Changing the kind of Sequence to * from *
-> * means losing the Functor, Monad, and MonadPlus superclasses and all
the various maps and zips.

I guess you could separate those into an auxiliary class,

    class (Functor s, MonadPlus s) => SeqFunctor s where
        mapWithIndex :: (Int -> a -> b) -> s a -> s b
        zip :: s a -> s b -> s (a,b)
        ...

and require that any instance of SeqFunctor also be an instance of
Sequence.

A pity we can't do something like,

    class (Functor s, MonadPlus s, forall a. Sequence (s a) a) =>
            SeqFunctor s where
        ...

-- 
David Menendez <zednenem at psualum.com> | "In this house, we obey the laws
<http://www.eyrie.org/~zednenem>      |        of thermodynamics!"


More information about the Haskell-Cafe mailing list