[[PageOutline]] = 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 [ticket:101 class aliases] or something similar, but such features are not yet implemented. == References == * [http://www.haskell.org/onlinereport/basic.html#sect6.3 Standard Haskell Classes] of Haskell 98 * [http://www.haskell.org/onlinereport/standard-prelude.html Standard Prelude] of Haskell 98 == 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 [http://www.haskell.org/ghc/docs/6.4-latest/html/libraries/mtl/Control-Monad-Error.html 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 [http://www.haskell.org/ghc/dist/current/docs/libraries/base/Control-Applicative.html 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`.