singletons-2.0: tests/compile-and-dump/Singletons/Classes2.hs
module Singletons.Classes2 where
import Prelude hiding (const)
import Singletons.Nat
import Singletons.Classes
import Data.Singletons
import Data.Singletons.TH
import Data.Singletons.Prelude.Ord (EQSym0, LTSym0, GTSym0, Sing(..))
import Language.Haskell.TH.Desugar
$(singletons [d|
-- tests promotion of class instances when the class was declared
-- in a different source file than the instance.
data NatFoo = ZeroFoo | SuccFoo NatFoo
instance MyOrd NatFoo where
ZeroFoo `mycompare` ZeroFoo = EQ
ZeroFoo `mycompare` (SuccFoo _) = LT
(SuccFoo _) `mycompare` ZeroFoo = GT
(SuccFoo n) `mycompare` (SuccFoo m) = m `mycompare` n
|])