Haskell Code by HsColour

module Data.Derive.Ord where
{-
import Prelude

example :: Sample
instance Ord a => Ord (Sample a) where
 compare a b = check a b
 where
 check (First) (First) = EQ
 check (Second x1 x2) (Second y1 y2) = compare x1 y1 & compare x2 y2 & EQ
 check (Third x1) (Third y1) = compare x1 y1 & EQ
 check x y | length [First{},Second{},Third{}] > 1 = compare (tag x) (tag y)

 EQ & x = x
 x & _ = x

 tag (First{}) = 0 :: Int
 tag (Second{}) = 1 :: Int
 tag (Third{}) = 2 :: Int

-}
-- GENERATED START

import Data.Derive.DSL.DSL
import Data.Derive.Internal.Derivation

makeOrd :: Derivation
makeOrd = derivationDSL "Ord" dslOrd

dslOrd =
 List [Instance ["Ord"] "Ord" (List [App "InsDecl" (List [App
 "FunBind" (List [List [App "Match" (List [App "Ident" (List [
 String "compare"]),List [App "PVar" (List [App "Ident" (List [
 String "a"])]),App "PVar" (List [App "Ident" (List [String "b"])])
 ],App "Nothing" (List []),App "UnGuardedRhs" (List [Application (
 List [App "Var" (List [App "UnQual" (List [App "Ident" (List [
 String "check"])])]),App "Var" (List [App "UnQual" (List [App
 "Ident" (List [String "a"])])]),App "Var" (List [App "UnQual" (
 List [App "Ident" (List [String "b"])])])])]),App "BDecls" (List [
 List [App "FunBind" (List [Concat (List [MapCtor (App "Match" (
 List [App "Ident" (List [String "check"]),List [App "PParen" (List
 [App "PApp" (List [App "UnQual" (List [App "Ident" (List [CtorName
 ])]),MapField (App "PVar" (List [App "Ident" (List [Concat (List [
 String "x",ShowInt FieldIndex])])]))])]),App "PParen" (List [App
 "PApp" (List [App "UnQual" (List [App "Ident" (List [CtorName])]),
 MapField (App "PVar" (List [App "Ident" (List [Concat (List [
 String "y",ShowInt FieldIndex])])]))])])],App "Nothing" (List []),
 App "UnGuardedRhs" (List [Fold (App "InfixApp" (List [Tail,App
 "QVarOp" (List [App "UnQual" (List [App "Symbol" (List [String "&"
 ])])]),Head])) (Concat (List [List [App "Con" (List [App "UnQual"
 (List [App "Ident" (List [String "EQ"])])])],Reverse (MapField (
 Application (List [App "Var" (List [App "UnQual" (List [App
 "Ident" (List [String "compare"])])]),App "Var" (List [App
 "UnQual" (List [App "Ident" (List [Concat (List [String "x",
 ShowInt FieldIndex])])])]),App "Var" (List [App "UnQual" (List [
 App "Ident" (List [Concat (List [String "y",ShowInt FieldIndex])])
 ])])])))]))]),App "BDecls" (List [List []])])),List [App "Match" (
 List [App "Ident" (List [String "check"]),List [App "PVar" (List [
 App "Ident" (List [String "x"])]),App "PVar" (List [App "Ident" (
 List [String "y"])])],App "Nothing" (List []),App "GuardedRhss" (
 List [List [App "GuardedRhs" (List [List [App "Qualifier" (List [
 App "InfixApp" (List [App "App" (List [App "Var" (List [App
 "UnQual" (List [App "Ident" (List [String "length"])])]),App
 "List" (List [MapCtor (App "RecConstr" (List [App "UnQual" (List [
 App "Ident" (List [CtorName])]),List []]))])]),App "QVarOp" (List
 [App "UnQual" (List [App "Symbol" (List [String ">"])])]),App
 "Lit" (List [App "Int" (List [Int 1])])])])],Application (List [
 App "Var" (List [App "UnQual" (List [App "Ident" (List [String
 "compare"])])]),App "Paren" (List [App "App" (List [App "Var" (
 List [App "UnQual" (List [App "Ident" (List [String "tag"])])]),
 App "Var" (List [App "UnQual" (List [App "Ident" (List [String "x"
 ])])])])]),App "Paren" (List [App "App" (List [App "Var" (List [
 App "UnQual" (List [App "Ident" (List [String "tag"])])]),App
 "Var" (List [App "UnQual" (List [App "Ident" (List [String "y"])])
 ])])])])])]]),App "BDecls" (List [List []])])]])]),App "FunBind" (
 List [List [App "Match" (List [App "Symbol" (List [String "&"]),
 List [App "PApp" (List [App "UnQual" (List [App "Ident" (List [
 String "EQ"])]),List []]),App "PVar" (List [App "Ident" (List [
 String "x"])])],App "Nothing" (List []),App "UnGuardedRhs" (List [
 App "Var" (List [App "UnQual" (List [App "Ident" (List [String "x"
 ])])])]),App "BDecls" (List [List []])]),App "Match" (List [App
 "Symbol" (List [String "&"]),List [App "PVar" (List [App "Ident" (
 List [String "x"])]),App "PWildCard" (List [])],App "Nothing" (
 List []),App "UnGuardedRhs" (List [App "Var" (List [App "UnQual" (
 List [App "Ident" (List [String "x"])])])]),App "BDecls" (List [
 List []])])]]),App "FunBind" (List [MapCtor (App "Match" (List [
 App "Ident" (List [String "tag"]),List [App "PParen" (List [App
 "PRec" (List [App "UnQual" (List [App "Ident" (List [CtorName])]),
 List []])])],App "Nothing" (List []),App "UnGuardedRhs" (List [App
 "ExpTypeSig" (List [App "Lit" (List [App "Int" (List [CtorIndex])]
 ),App "TyCon" (List [App "UnQual" (List [App "Ident" (List [String
 "Int"])])])])]),App "BDecls" (List [List []])]))])]])])]])])])]
-- GENERATED STOP

AltStyle によって変換されたページ (->オリジナル) /