name: discrete version: 0.1.0.0 x-revision: 1 synopsis: replacement for enum description: A 'Discrete' type is a set X with at least one element, along with two functions, @'succ' :: X -> 'Maybe' X@ and @'pred' :: X -> 'Maybe' X@, such that all inhabitants of the set X can be constructed given at least a single element of the set and these two functions. The following must hold: . @'pred' '>=>' 'succ' '>=>' 'pred' = 'pred'@ . @'succ' '>=>' 'pred' '>=>' 'succ' = 'succ'@ . This means that 'Int' is a discrete type, because given any x :: 'Int', one can construct any other 'Int' with the following functions: . @'succ' x = if x '==' 'maxBound' then 'Nothing' else 'Just' (x '+' 1)@ . @'pred' x = if x '==' 'minBound' then 'Nothing' else 'Just' (x '-' 1)@ . This also means that something like 'Double' is /not/ a discrete type, because there are no such functions 'succ' and 'pred' that given any value of type 'Double' can allow the construction of all values of type 'Double'. . 'Discrete' acts as a replacement for 'GHC.Enum.Enum'. The motivation for 'Discrete' is two-fold: firstly, totality of all typeclass instances, and secondly, that 'GHC.Enum.Enum' is a typeclass that does too many things, and does them poorly. If 'succ' or 'pred' are called on 'maxBound' or 'minBound', respectively, the result will be 'Nothing'. homepage: https://github.com/chessai/discrete license: BSD3 license-file: LICENSE author: chessai maintainer: chessai1996@gmail.com category: Data build-type: Simple extra-source-files: ChangeLog.md cabal-version: >=1.10 library exposed-modules: Data.Discrete Data.Modular build-depends: base >=4.7 && <4.13 default-language: Haskell2010