@@ -5,7 +5,10 @@ PureScript has basic support for type classes via the ``class`` and ``instance``
6Types appearing in class instances are must be of the form ``String``, ``Number``, ``Boolean``, or ``C t1 ... tn`` where ``C`` is a type constructor (including ``[]`` and ``->`` and ``t_i`` are types of the same form).
6Types appearing in class instances are must be of the form ``String``, ``Number``, ``Boolean``, or ``C t1 ... tn`` where ``C`` is a type constructor (including ``[]`` and ``->`` and ``t_i`` are types of the same form).
8−Type class instances are resolved based on the order in which they appeared in the source files. In particular, overlapping instances are permitted.
8+Type class instances are resolved based on the order in which they appeared in the source files. Overlapping instances will result in a compilation error.
10Here is an example of the ``Show`` typeclass, with instances for ``String``, ``Booleans`` and ``[]``::
13Here is an example of the ``Show`` typeclass, with instances for ``String``, ``Booleans`` and ``[]``::
@@ -24,3 +27,22 @@ Here is an example of the ``Show`` typeclass, with instances for ``String``, ``B
24 show (x:xs) = show x ++ " : " ++ showArray xs
27 show (x:xs) = show x ++ " : " ++ showArray xs
26 example = show [true, false]
29 example = show [true, false]
34+Superclass implications can be indicated in a class declaration with a backwards fat arrow ``<=``::
36+ class (Monad m) <= MonadFail m where
37+ fail :: forall a. String -> m a
39+Superclass instances will be used when searching for an instance of a subclass. For example, in the code below, the ``Monad`` constraint introduced by the ``return`` function can be discharged since ``Monad`` is a superclass of ``MonadFail``.
41+ assert :: forall m. (MonadFail m) => Bool -> m {}
42+ assert true = return {}
43+ assert false = fail "Assertion failed"
48+A constrained type will never be inferred for a top-level declaration without an explicit type signature.