Note: The difference to a 'strict' RWST implementation is
that accumulation of values does not happen in the
Applicative and Monad instances but when invoking `Writer`-specific
functions like `writer` or `listen`.
Note: The difference to a 'strict' Writer implementation is
that accumulation of values does not happen in the
Applicative and Monad instances but when invoking `Writer`-specific
functions like `writer` or `listen`.
An order is a particular kind of binary relation. The order
relation is intended to proceed in some direction, though not
necessarily with a unique path.
This module contains stuff that may use functions from `Data.List`.
This separation is needed because `Data.List` uses `List1` type inside it,
thus the core of `List1` must not import `Data.List`.
Deriving foldable instances using reflection
You can for instance define:
```
data Tree a = Leaf a | Node (Tree a) (Tree a)
treeFoldable : Foldable Tree
treeFoldable = %runElab derive
```
Deriving functor instances using reflection
You can for instance define:
```
data Tree a = Leaf a | Node (Tree a) (Tree a)
treeFunctor : Functor Tree
treeFunctor = %runElab derive
```
Deriving show instances using reflection
You can for instance define:
```
data Tree a = Leaf a | Node (Tree a) (Tree a)
treeShow : Show a => Show (Tree a)
treeShow = %runElab derive
```
Deriving traversable instances using reflection
You can for instance define:
```
data Tree a = Leaf a | Node (Tree a) (Tree a)
treeFoldable : Traversable Tree
treeFoldable = %runElab derive
```