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

Brian Hulley writes:
1) Did Edison choose MonadPlus just because this fitted in with the lack of multi-parameter typeclasses in H98?
Instances of Monoid (and your ISeq) have kind *. Instances of MonadPlus (and Edison's Sequence) have kind * -> *. Functions like map, zip, and their variants are best defined in terms of type constructors. With Sequence, you have zipWith :: (Sequence s) => (a -> b -> c) -> s a -> s b -> s c With ISeq, you'd have to do something like zipWith :: (ISeq s1 a, ISeq s2 b, ISeq s3 c) => (a -> b -> c) -> s1 -> s2 -> s3 which isn't able to make any assumptions about s1, s2, and s3 having the same structure.
3) Is it worth bothering to derive ISeq from Monoid (with the possible extra inefficiency of the indirection through the definitions for append = mappend etc or does the compiler completely optimize this out)?
I would expect the compiler to inline append.
4) Would it be worth reconsidering the rules for top level names so that class methods could always be local to their class (ditto for value constructors and field names being local to their type constructor).
Qualified module imports are the way to go, here. Do you really want to
start writing "if x Eq/== y Num/+ 1 then ... "?
--
David Menendez
participants (1)
-
David Menendez