packages feed

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