Safe Haskell | Safe-Inferred |
---|---|

Language | Haskell2010 |

This module provides a way to generically obtain every possible value of a type, provided the generic representation of the type is compatible.

Probably the main reason this is useful is, unlike the builtin Haskell
`deriving Enum`

capability, this package understands non-nullary data
constructors. So you can, for instance, enumerate something like

data Foo = Foo Bool Bool deriving (Generic)

This module does not provide a way to manually provide an enumeration
by instantiating a type class. Enumerations **must** be obtained
generically. Therefore, it is not enough that your type be an instance
of `Generic`

. Any types which it references must also be instances of
`Generic`

.

In GHCI:

λ: :set +m λ: :set prompt "λ: " λ: :set prompt-cont "λ.. " λ: :set -XDeriveGeneric λ: λ: :{ λ.. data Foo λ.. = A Bar λ.. | B λ.. | C Bool λ.. deriving (Show, Generic) λ.. λ.. data Bar λ.. = X λ.. | Y λ.. | Z λ.. deriving (Show, Generic) λ.. :} λ: λ: enumeration :: [Foo] [A X,A Y,A Z,B,C False,C True] λ:

## Synopsis

- enumeration :: (Generic a, HasFirst (Rep a), HasSuccessor (Rep a)) => [a]
- predMay :: (Generic a, HasPredecessor (Rep a)) => a -> Maybe a
- succMay :: (Generic a, HasSuccessor (Rep a)) => a -> Maybe a
- type HasPredecessor = GenericPred
- type HasSuccessor = GenericSucc
- type HasFirst = GenericFirst

# Documentation

enumeration :: (Generic a, HasFirst (Rep a), HasSuccessor (Rep a)) => [a] Source #

Produce a list of every possible value.

predMay :: (Generic a, HasPredecessor (Rep a)) => a -> Maybe a Source #

Return the preceding value, if there is one.

succMay :: (Generic a, HasSuccessor (Rep a)) => a -> Maybe a Source #

Return the succeeding value, if there is one.

type HasPredecessor = GenericPred Source #

type HasSuccessor = GenericSucc Source #