wiki:StandardClasses

Version 14 (modified by ross@…, 7 years ago) (diff)

--

Issues with Standard Classes

This page collects issues and proposals for the standard classes. Many of the proposals involve additional superclasses, which would be less burdensome with class aliases or something similar, but such features are not yet implemented.

References

Constructor classes

The Functor class

Proposal:

  • Add instances for ((->) a), ((,) a) and Either a.

The Monad class

Issues:

  • Monads are really functors, but programmers can't always assume that fmap is defined for them, and so must use liftM instead. Similarly, code parameterized by Functor cannot be used with monads.
  • The fail method was added to the class in Haskell 98 to implement pattern match failure in do expressions. However the assumption that errors are strings can be problematic (e.g. cf the Error class in Control.Monad.Error, or for internationalization).

Proposals:

  • Add instance for ((->) a).
  • Make Functor a superclass of Monad. This would impose an extra burden on those who just want to define a Monad.
  • Make join a method of Monad, interdefined with (>>=).
  • A more extreme step down this road would be to interpose the new Applicative class between Functor and Monad, with corresponding renaming of methods.

Numbers

See NumericClasses.

Other standard classes

The Read class

See ReadClass.

The Enum class

Issues:

  • succ and pred are unused.
  • The default definitions of enum* would make more sense if toEnum and fromEnum used Integer instead of Int.
  • Some doubt that it makes sense to have Float and Double instances.
  • It is wierd that [0,3..20]::[Rational] includes 21.

The Ix class

Issues:

  • There is no portable way to report indexing errors accurately.

Proposal:

  • Make Show a superclass of Ix, so that the offending index and range can be shown in exceptions. (All instances of Ix in the base package are also instances of Show.)

The Bits class

Issues:

  • The Num superclass may unduly restrict instances. The only thing actually needed from Num is 0.
  • The bitSize method is not defined for all instances, and there is no general way to test whether it can be safely called.

The Storable class

Issues:

  • Some interfaces require clients to manage the memory for objects, but to treat them abstractly. In such cases one wants to define sizeOf and alignment (to use malloc or alloca), but not peek or poke.