pandora-0.3.3: Pandora/Paradigm/Primary/Object/Natural.hs
module Pandora.Paradigm.Primary.Object.Natural where
import Pandora.Pattern.Category (($))
import Pandora.Pattern.Object.Setoid (Setoid ((==)))
import Pandora.Pattern.Object.Chain (Chain ((<=>)))
import Pandora.Pattern.Object.Semigroup (Semigroup ((+)))
import Pandora.Pattern.Object.Ringoid (Ringoid ((*)))
import Pandora.Pattern.Object.Monoid (Monoid (zero))
import Pandora.Pattern.Object.Quasiring (Quasiring (one))
import Pandora.Paradigm.Primary.Object.Boolean (Boolean (True, False))
import Pandora.Paradigm.Primary.Object.Ordering (Ordering (Less, Equal, Greater))
data Natural = Zero | Natural Natural
instance Setoid Natural where
Zero == Zero = True
Natural n == Natural m = n == m
_ == _ = False
instance Chain Natural where
Zero <=> Zero = Equal
Zero <=> Natural _ = Less
Natural _ <=> Zero = Greater
Natural n <=> Natural m = n <=> m
instance Semigroup Natural where
Zero + m = m
Natural n + m = Natural $ n + m
instance Ringoid Natural where
Zero * _ = Zero
Natural n * m = m + n * m
instance Monoid Natural where
zero = Zero
instance Quasiring Natural where
one = Natural Zero