module Language.Paraiso.OM.Arithmetic
(
Arity(..), arityI, arityO,
Operator(..)
) where
import qualified Data.Dynamic as Dynamic
import NumericPrelude hiding (Ordering(..), Eq(..), Ord(..))
import qualified NumericPrelude as P
class Arity a where
arity :: a -> (Int, Int)
arityI, arityO :: (Arity a) => a -> Int
arityI = fst.arity
arityO = snd.arity
data Operator =
Identity |
Add |
Sub |
Neg |
Mul |
Div |
Mod |
DivMod |
Inv |
Not |
And |
Or |
EQ |
NE |
LT |
LE |
GT |
GE |
Max |
Min |
Abs |
Signum |
Select |
Ipow |
Pow |
Madd |
Msub |
Nmadd |
Nmsub |
Sqrt |
Exp |
Log |
Sin |
Cos |
Tan |
Asin |
Acos |
Atan |
Atan2 |
Sincos |
Cast Dynamic.TypeRep
deriving (P.Eq, P.Ord, P.Show)
instance Arity Operator where
arity a = case a of
Identity -> (1,1)
Add -> (2,1)
Sub -> (2,1)
Neg -> (1,1)
Mul -> (2,1)
Div -> (2,1)
Mod -> (2,1)
DivMod -> (2,2)
Inv -> (1,1)
Not -> (1,1)
And -> (2,1)
Or -> (2,1)
EQ -> (2,1)
NE -> (2,1)
LT -> (2,1)
LE -> (2,1)
GT -> (2,1)
GE -> (2,1)
Max -> (2,1)
Min -> (2,1)
Abs -> (1,1)
Signum -> (1,1)
Select -> (3,1)
Ipow -> (2,1)
Pow -> (2,1)
Madd -> (3,1)
Msub -> (3,1)
Nmadd -> (3,1)
Nmsub -> (3,1)
Sqrt -> (1,1)
Exp -> (1,1)
Log -> (1,1)
Sin -> (1,1)
Cos -> (1,1)
Tan -> (1,1)
Asin -> (1,1)
Acos -> (1,1)
Atan -> (1,1)
Atan2 -> (2,1)
Sincos -> (1,2)
Cast _ -> (1,1)