
ajb@spamcop.net writes:
G'day all.
Quoting Robert Dockins
: 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