packages feed

singletons-base-3.3: tests/compile-and-dump/Singletons/Classes2.hs

module Singletons.Classes2 where

import Data.Ord.Singletons (EQSym0, LTSym0, GTSym0, Sing(..))
import Data.Singletons.Base.TH
import Language.Haskell.TH.Desugar
import Prelude hiding (const)
import Singletons.Classes
import Singletons.Nat


$(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
 |])