packages feed

pandora-0.3.8: Pandora/Paradigm/Primary/Object/Denumerator.hs

module Pandora.Paradigm.Primary.Object.Denumerator where

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.Paradigm.Primary.Object.Boolean (Boolean (True, False))
import Pandora.Paradigm.Primary.Object.Ordering (Ordering (Less, Equal, Greater))

data Denumerator = One | Denumerator Denumerator

instance Setoid Denumerator where
	One == One = True
	Denumerator n == Denumerator m = n == m
	_ == _ = False

instance Chain Denumerator where
	One <=> One = Equal
	One <=> Denumerator _ = Less
	Denumerator _ <=> One = Greater
	Denumerator n <=> Denumerator m = n <=> m

instance Semigroup Denumerator where
	One + m = Denumerator m
	Denumerator n + m = Denumerator (n + m)

instance Ringoid Denumerator where
	One * n = n
	Denumerator n * m = m + n * m