jake.mcarthur at gmail.com
Thu Jan 28 00:04:18 EST 2010
It's about time we start putting this mailing list to use. I'd like to
begin by starting a thread simply about our motivations. Here are my
reasons for starting the alt-stdlib project:
* Many of the commonly used type classes in the standard library are
ad hoc and arbitrary. They are littered with things that do not
necessarily make much sense where they are. For example, Num requires
Show and Eq, and Monad has fail.
* Many of the commonly used functions in the standard library have
unnecessarily monomorphic types. It was fine in the age of the
monomorphism restriction, but I believe that age is coming to a close.
* The standard library lacks certain types which I see as somewhat
fundamental. For example, we have no standard Natural ("infinite"
maxBound) type or LazyNatural type.
* The standard library almost entirely lacks an algebra. Num doesn't
count, and Monoid is not enough. This would not only be useful for
abstraction, but also for optimizations (more known properties about
code means more opportunities for effective rewrite rules).
* The standard library has an annoying Monad type class hierarchy.
Monad requires neither Applicative nor Functor. Applicative is not even
specified to agree with Monad. Alternative and MonadPlus instances each
have a choice from two sets of laws to obey
* The entire library could be designed with more generality in mind.
It's annoying to have several versions of the same function when just
one or two versions would be fine.
* As new GHC extensions are created, the library drifts farther and
farther from what a modern library taking advantage of these extensions
could look like.
* There are approaches to abstraction which the standard library
simply doesn't support with any sane level of ease due to various
combinations of the above and probably other things I failed to remember
as I wrote this.
* Simply creating new packages to use in conjunction with the
existing standard library is insufficient simply because the standard
library remains. As long as backward compatibility is maintained to some
degree, there are big changes that will simply never happen.
I will probably end up amending this list later as I think of new ideas
or ways to word the above ideas better. Here's my questions to
everybody. Why are *you* here? What do you hope to get out of alt-stdlib?
More information about the Alt-stdlib