ajhc-0.8.0.1: lib/jhc/Jhc/Num.m4
m4_divert(-1)
m4_dnl simple macros for defining instances for classes in Jhc.Enum
m4_define(MkNumPrim,{{
instance Num $1 where
(+) = add$1
(-) = sub$1
(*) = mul$1
negate = negate$1
abs x = if x < 0 then negate$1 x else x
signum x = if x == 0 then x else (if x > 0 then one$1 else negate one$1)
fromInteger = fromInteger$1
fromInt = fromInt$1
foreign import primitive "$2{{}}2$2" fromInt$1 :: Int -> $1
foreign import primitive "$2{{}}2$2" fromInteger$1 :: Integer -> $1
foreign import primitive "one" one$1 :: $1
foreign import primitive "Add" add$1 :: $1 -> $1 -> $1
foreign import primitive "Sub" sub$1 :: $1 -> $1 -> $1
foreign import primitive "Mul" mul$1 :: $1 -> $1 -> $1
foreign import primitive "Neg" negate$1 :: $1 -> $1
}})
m4_define(MkRealPrim,{{
instance Real $1 where
toRational x = toInteger x :% 1
toDouble x = toDouble$1 x
foreign import primitive "$2{{}}2F" toDouble$1 :: $1 -> Double
}})
m4_define(MkIntegralPrim,{{
instance Integral $1 where
-- div = div$1
quot = quot$1
-- mod = mod$1
rem = rem$1
toInt = toInt$1
toInteger = toInteger$1
foreign import primitive "I2I" toInt$1 :: $1 -> Int
foreign import primitive "I2I" toInteger$1 :: $1 -> Integer
--foreign import primitive "Div" div$1 :: $1 -> $1 -> $1
foreign import primitive "Quot" quot$1 :: $1 -> $1 -> $1
--foreign import primitive "Mod" mod$1 :: $1 -> $1 -> $1
foreign import primitive "Rem" rem$1 :: $1 -> $1 -> $1
}})
m4_define(MkIntegralUPrim,{{
instance Integral $1 where
div = udiv$1
quot = udiv$1
mod = umod$1
rem = umod$1
toInt = toInt$1
toInteger = toInteger$1
foreign import primitive "U2U" toInt$1 :: $1 -> Int
foreign import primitive "U2U" toInteger$1 :: $1 -> Integer
foreign import primitive "UDiv" udiv$1 :: $1 -> $1 -> $1
foreign import primitive "UMod" umod$1 :: $1 -> $1 -> $1
}})
m4_divert