| Safe Haskell | Safe |
|---|---|
| Language | Haskell2010 |
Data.Universe.Class
Description
Bottoms are ignored for this entire module: only fully-defined inhabitants are considered inhabitants.
Documentation
class Universe a where Source #
Creating an instance of this class is a declaration that your type is
recursively enumerable (and that universe is that enumeration). In
particular, you promise that any finite inhabitant has a finite index in
universe, and that no inhabitant appears at two different finite indices.
Well-behaved instance should produce elements lazily.
Laws:
elemxuniverse-- any inhabitant has a finite index let pfx =takenuniverse-- any finite prefix of universe has unique elements inlengthpfx =length(nub pfx)
Minimal complete definition
Nothing
Instances
| Universe Void Source # | |
Defined in Data.Universe.Class | |
| Universe All Source # | |
Defined in Data.Universe.Class | |
| Universe Any Source # | |
Defined in Data.Universe.Class | |
| Universe Int16 Source # | |
Defined in Data.Universe.Class | |
| Universe Int32 Source # | |
Defined in Data.Universe.Class | |
| Universe Int64 Source # | |
Defined in Data.Universe.Class | |
| Universe Int8 Source # | |
Defined in Data.Universe.Class | |
| Universe Word16 Source # | |
Defined in Data.Universe.Class | |
| Universe Word32 Source # | |
Defined in Data.Universe.Class | |
| Universe Word64 Source # | |
Defined in Data.Universe.Class | |
| Universe Word8 Source # | |
Defined in Data.Universe.Class | |
| Universe Ordering Source # | |
Defined in Data.Universe.Class | |
| Universe Integer Source # | |
Defined in Data.Universe.Class | |
| Universe Natural Source # | |
Defined in Data.Universe.Class | |
| Universe () Source # | |
Defined in Data.Universe.Class | |
| Universe Bool Source # | |
Defined in Data.Universe.Class | |
| Universe Char Source # | |
Defined in Data.Universe.Class | |
| Universe Int Source # | |
Defined in Data.Universe.Class | |
| Universe Word Source # | |
Defined in Data.Universe.Class | |
| Universe a => Universe (First a) Source # | |
Defined in Data.Universe.Class | |
| Universe a => Universe (Last a) Source # | |
Defined in Data.Universe.Class | |
| Universe a => Universe (Max a) Source # | |
Defined in Data.Universe.Class | |
| Universe a => Universe (Min a) Source # | |
Defined in Data.Universe.Class | |
| (Ord a, Universe a) => Universe (Set a) Source # |
|
Defined in Data.Universe.Class | |
| Universe a => Universe (NonEmpty a) Source # | |
Defined in Data.Universe.Class | |
| Universe a => Universe (Identity a) Source # | |
Defined in Data.Universe.Class | |
| Universe a => Universe (First a) Source # | |
Defined in Data.Universe.Class | |
| Universe a => Universe (Last a) Source # | |
Defined in Data.Universe.Class | |
| Universe a => Universe (Dual a) Source # | |
Defined in Data.Universe.Class | |
| Universe a => Universe (Product a) Source # | |
Defined in Data.Universe.Class | |
| Universe a => Universe (Sum a) Source # | |
Defined in Data.Universe.Class | |
| RationalUniverse a => Universe (Ratio a) Source # | |
Defined in Data.Universe.Class | |
| Universe a => Universe (Maybe a) Source # | |
Defined in Data.Universe.Class | |
| Universe a => Universe (Solo a) Source # | |
Defined in Data.Universe.Class | |
| Universe a => Universe [a] Source # | |
Defined in Data.Universe.Class | |
| (Ord k, Finite k, Universe v) => Universe (Map k v) Source # |
|
Defined in Data.Universe.Class | |
| (Universe a, Universe b) => Universe (Either a b) Source # | |
Defined in Data.Universe.Class | |
| Universe (Proxy a) Source # | |
Defined in Data.Universe.Class | |
| (Universe a, Universe b) => Universe (a, b) Source # | |
Defined in Data.Universe.Class | |
| (Finite a, Ord a, Universe b) => Universe (a -> b) Source # |
|
Defined in Data.Universe.Class | |
| Universe a => Universe (Const a b) Source # | |
Defined in Data.Universe.Class | |
| Universe a => Universe (Tagged b a) Source # | |
Defined in Data.Universe.Class | |
| Universe (f a) => Universe (IdentityT f a) Source # | |
Defined in Data.Universe.Class | |
| (Finite e, Ord e, Universe (m a)) => Universe (ReaderT e m a) Source # | |
Defined in Data.Universe.Class | |
| (Universe a, Universe b, Universe c) => Universe (a, b, c) Source # | |
Defined in Data.Universe.Class | |
| (Universe (f a), Universe (g a)) => Universe (Product f g a) Source # | |
Defined in Data.Universe.Class | |
| (Universe (f a), Universe (g a)) => Universe (Sum f g a) Source # | |
Defined in Data.Universe.Class | |
| (Universe a, Universe b, Universe c, Universe d) => Universe (a, b, c, d) Source # | |
Defined in Data.Universe.Class | |
| Universe (f (g a)) => Universe (Compose f g a) Source # | |
Defined in Data.Universe.Class | |
| (Universe a, Universe b, Universe c, Universe d, Universe e) => Universe (a, b, c, d, e) Source # | |
Defined in Data.Universe.Class | |
class Universe a => Finite a where Source #
Creating an instance of this class is a declaration that your universe
eventually ends. Minimal definition: no methods defined. By default,
universeF = universe, but for some types (like Either) the universeF
method may have a more intuitive ordering.
Laws:
elemxuniverseF-- any inhabitant has a finite indexlength(filter(== x)universeF) == 1 -- should terminate (xs ->cardinalityxs ==genericLengthxs)universeF
Note:
may not hold for all types, though the laws imply that elemIndex x universe == elemIndex x universeFuniverse
is a permutation of universeF.
>>>elemIndex (Left True :: Either Bool Bool) universeJust 2
>>>elemIndex (Left True :: Either Bool Bool) universeFJust 1
Minimal complete definition
Nothing