compare-type-0.1.1: compare types of any kinds in haskell

Copyright(c) Yusuke Matsushita 2015
LicenseBSD3
MaintainerYusuke Matsushita
Stabilityprovisional
Portabilityportable
Safe HaskellTrustworthy
LanguageHaskell2010

Type.Compare

Contents

Description

Compare two types of any (possibly different) kinds.

Synopsis

Base

type family Compare a b :: Ordering Source

Compare two types of any (possibly different) kinds. Since Compare itself is a closed type family, add instances to CompareUser if you want to compare other types.

Equations

Compare (Down a) (Down b) = Compare b a 
Compare Largest Largest = EQ 
Compare _' Largest = LT 
Compare Largest _' = GT 
Compare Smallest Smallest = EQ 
Compare _' Smallest = GT 
Compare Smallest _' = LT 
Compare False False = EQ 
Compare False True = LT 
Compare True False = GT 
Compare True True = EQ 
Compare LT LT = EQ 
Compare LT EQ = LT 
Compare LT GT = LT 
Compare EQ LT = GT 
Compare EQ EQ = EQ 
Compare EQ GT = LT 
Compare GT LT = GT 
Compare GT EQ = GT 
Compare GT GT = EQ 
Compare m n = CmpNat m n 
Compare s t = CmpSymbol s t 
Compare Nothing Nothing = EQ 
Compare Nothing (Just b) = LT 
Compare (Just a) Nothing = GT 
Compare (Just a) (Just b) = Compare a b 
Compare (Left _') (Right _'') = LT 
Compare (Right _') (Left _'') = GT 
Compare (Left a) (Left b) = Compare a b 
Compare (Right a) (Right b) = Compare a b 
Compare [] [] = EQ 
Compare [] (b : bs) = LT 
Compare (a : as) [] = GT 
Compare (a : as) (b : bs) = Compare a b $$ Compare as bs 
Compare () () = EQ 
Compare `(a1, a2)` `(b1, b2)` = Compare a1 b1 $$ Compare a2 b2 
Compare `(a1, a2, a3)` `(b1, b2, b3)` = (Compare a1 b1 $$ Compare a2 b2) $$ Compare a3 b3 
Compare `(a1, a2, a3, a4)` `(b1, b2, b3, b4)` = ((Compare a1 b1 $$ Compare a2 b2) $$ Compare a3 b3) $$ Compare a4 b4 
Compare `(a1, a2, a3, a4, a5)` `(b1, b2, b3, b4, b5)` = (((Compare a1 b1 $$ Compare a2 b2) $$ Compare a3 b3) $$ Compare a4 b4) $$ Compare a5 b5 
Compare `(a1, a2, a3, a4, a5, a6)` `(b1, b2, b3, b4, b5, b6)` = ((((Compare a1 b1 $$ Compare a2 b2) $$ Compare a3 b3) $$ Compare a4 b4) $$ Compare a5 b5) $$ Compare a6 b6 
Compare `(a1, a2, a3, a4, a5, a6, a7)` `(b1, b2, b3, b4, b5, b6, b7)` = (((((Compare a1 b1 $$ Compare a2 b2) $$ Compare a3 b3) $$ Compare a4 b4) $$ Compare a5 b5) $$ Compare a6 b6) $$ Compare a7 b7 
Compare `(a1, a2, a3, a4, a5, a6, a7, a8)` `(b1, b2, b3, b4, b5, b6, b7, b8)` = ((((((Compare a1 b1 $$ Compare a2 b2) $$ Compare a3 b3) $$ Compare a4 b4) $$ Compare a5 b5) $$ Compare a6 b6) $$ Compare a7 b7) $$ Compare a8 b8 
Compare `(a1, a2, a3, a4, a5, a6, a7, a8, a9)` `(b1, b2, b3, b4, b5, b6, b7, b8, b9)` = (((((((Compare a1 b1 $$ Compare a2 b2) $$ Compare a3 b3) $$ Compare a4 b4) $$ Compare a5 b5) $$ Compare a6 b6) $$ Compare a7 b7) $$ Compare a8 b8) $$ Compare a9 b9 
Compare `(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)` `(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10)` = ((((((((Compare a1 b1 $$ Compare a2 b2) $$ Compare a3 b3) $$ Compare a4 b4) $$ Compare a5 b5) $$ Compare a6 b6) $$ Compare a7 b7) $$ Compare a8 b8) $$ Compare a9 b9) $$ Compare a10 b10 
Compare () () = EQ 
Compare (a1, a2) (b1, b2) = Compare a1 b1 $$ Compare a2 b2 
Compare (a1, a2, a3) (b1, b2, b3) = (Compare a1 b1 $$ Compare a2 b2) $$ Compare a3 b3 
Compare (a1, a2, a3, a4) (b1, b2, b3, b4) = ((Compare a1 b1 $$ Compare a2 b2) $$ Compare a3 b3) $$ Compare a4 b4 
Compare (a1, a2, a3, a4, a5) (b1, b2, b3, b4, b5) = (((Compare a1 b1 $$ Compare a2 b2) $$ Compare a3 b3) $$ Compare a4 b4) $$ Compare a5 b5 
Compare (a1, a2, a3, a4, a5, a6) (b1, b2, b3, b4, b5, b6) = ((((Compare a1 b1 $$ Compare a2 b2) $$ Compare a3 b3) $$ Compare a4 b4) $$ Compare a5 b5) $$ Compare a6 b6 
Compare (a1, a2, a3, a4, a5, a6, a7) (b1, b2, b3, b4, b5, b6, b7) = (((((Compare a1 b1 $$ Compare a2 b2) $$ Compare a3 b3) $$ Compare a4 b4) $$ Compare a5 b5) $$ Compare a6 b6) $$ Compare a7 b7 
Compare (a1, a2, a3, a4, a5, a6, a7, a8) (b1, b2, b3, b4, b5, b6, b7, b8) = ((((((Compare a1 b1 $$ Compare a2 b2) $$ Compare a3 b3) $$ Compare a4 b4) $$ Compare a5 b5) $$ Compare a6 b6) $$ Compare a7 b7) $$ Compare a8 b8 
Compare (a1, a2, a3, a4, a5, a6, a7, a8, a9) (b1, b2, b3, b4, b5, b6, b7, b8, b9) = (((((((Compare a1 b1 $$ Compare a2 b2) $$ Compare a3 b3) $$ Compare a4 b4) $$ Compare a5 b5) $$ Compare a6 b6) $$ Compare a7 b7) $$ Compare a8 b8) $$ Compare a9 b9 
Compare (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) (b1, b2, b3, b4, b5, b6, b7, b8, b9, b10) = ((((((((Compare a1 b1 $$ Compare a2 b2) $$ Compare a3 b3) $$ Compare a4 b4) $$ Compare a5 b5) $$ Compare a6 b6) $$ Compare a7 b7) $$ Compare a8 b8) $$ Compare a9 b9) $$ Compare a10 b10 
Compare a b = CompareUser a b 

data LargestK Source

The largest type (and kind) on Compare.

Constructors

Largest 

data SmallestK Source

The smallest type (and kind) on Compare.

Constructors

Smallest 

type family CompareUser a b :: Ordering Source

Compare two types, of any kinds, which are not compared within Compare. Users can add instances.

Utility

type family OrdCase o x y z :: l Source

Equations

OrdCase LT x _' _'' = x 
OrdCase EQ _' y _'' = y 
OrdCase GT _' _'' z = z 

type family CompareCase a b x y z :: l Source

Equations

CompareCase a b x y z = OrdCase (Compare a b) x y z 

type family a <! b :: Bool infixl 4 Source

Equations

a <! b = CompareCase a b True False False 

type family a >=! b :: Bool infixl 4 Source

Equations

a >=! b = CompareCase a b False True True 

type family a >! b :: Bool infixl 4 Source

Equations

a >! b = CompareCase a b False False True 

type family a <=! b :: Bool infixl 4 Source

Equations

a <=! b = CompareCase a b True True False 

type family Max a b :: k Source

Equations

Max a b = CompareCase a b b b a 

type family Min a b :: k Source

Equations

Min a b = CompareCase a b a a b