{- |
This module is intended for documentation purposes. Do not import it!
-}
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