alms-0.6.0: src/Type/Rank.hs
module Type.Rank (
Rank, zero, infinity, inc
) where
import Syntax.PprClass as Ppr
import Data.Generics (Typeable, Data)
data Rank
= Finite !Int
| Infinity
deriving (Eq, Ord, Typeable, Data)
instance Show Rank where
show (Finite n) = show n
show Infinity = "∞"
instance Ppr Rank where ppr = Ppr.text . show
instance Bounded Rank where
minBound = Finite 0
maxBound = Infinity
zero, infinity ∷ Rank
zero = minBound
infinity = maxBound
inc ∷ Rank → Rank
inc (Finite n) = Finite (n + 1)
inc Infinity = Infinity