4PureScript has basic support for type classes via the ``class`` and ``instance`` keywords.
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).
8Type class instances are resolved based on the order in which they appeared in the source files. Overlapping instances will result in a compilation error.
13Here is an example of the ``Show`` typeclass, with instances for ``String``, ``Booleans`` and ``[]``::
18 instance showString :: Show String where
21 instance showBoolean :: Show Boolean where
25 instance showArray :: (Show a) => Show [a] where
27 show (x:xs) = show x ++ " : " ++ showArray xs
29 example = show [true, false]
34Superclass 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
39Superclass 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) => Boolean -> m Unit
42 assert true = return unit
43 assert false = fail "Assertion failed"
48A constrained type will never be inferred for a top-level declaration without an explicit type signature.
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list