module UniqueLogic.ST.Example.Term where
data T =
Const Rational
| Var Name
| Max T T
| Add T T
| Sub T T
| Mul T T
| Div T T
| Abs T
| Signum T
deriving (Int -> T -> ShowS
[T] -> ShowS
T -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [T] -> ShowS
$cshowList :: [T] -> ShowS
show :: T -> String
$cshow :: T -> String
showsPrec :: Int -> T -> ShowS
$cshowsPrec :: Int -> T -> ShowS
Show)
type Name = String
instance Num T where
fromInteger :: Integer -> T
fromInteger Integer
n = Rational -> T
Const forall a b. (a -> b) -> a -> b
$ forall a. Num a => Integer -> a
fromInteger Integer
n
+ :: T -> T -> T
(+) = T -> T -> T
Add
(-) = T -> T -> T
Sub
* :: T -> T -> T
(*) = T -> T -> T
Mul
abs :: T -> T
abs = T -> T
Abs
signum :: T -> T
signum = T -> T
Signum
instance Fractional T where
fromRational :: Rational -> T
fromRational Rational
x = Rational -> T
Const Rational
x
/ :: T -> T -> T
(/) = T -> T -> T
Div