May 1996Haskell 1.3Haskell 1.3
Version 1.3 of the report […] adds important new functionality, especially for input/output.
The role of typeclasses is significantly expanded by this Report. Previously, classes were only for concrete types; now, classes can be used for polymorphism over type constructors as well. This feature had been presented in A system of constructor classes a few years prior. The Report includes the following note on terminology:
The term ‘type class’ was used to describe the original Haskell 1.0 type system; ‘constructor class’ was used to describe an extension to the original type classes. There is no longer any reason to use two different terms.
Four standard constructor classes are given: Functor, Monad, MonadZero, and MonadPlus. Conspicuously absent from this list is Applicative, which will not appear until GHC 6.6 ten years later. We also note that Functor does not become a superclass of Monad until GHC 7.10, nearly twenty years after these classes were introduced.
The introduction of the Monad class coincides with the introduction of the
IO type constructor, which belongs to the Monad class.
Monadic I/O has proven to be more general and in many respects simpler than the stream-based I/O system used in Haskell 1.2.
This is the first version of the language that supports newtypes.