aboutsummaryrefslogtreecommitdiff
path: root/src/Expr.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Expr.hs')
-rw-r--r--src/Expr.hs62
1 files changed, 2 insertions, 60 deletions
diff --git a/src/Expr.hs b/src/Expr.hs
index e3d8aef..7a1b5e5 100644
--- a/src/Expr.hs
+++ b/src/Expr.hs
@@ -2,11 +2,11 @@ module Expr where
import Data.List
-
data Atom
= Rational Float
| Imaginary Float
| Matrix [[Expr]]
+ deriving (Eq)
data Expr
= EAtom Atom
@@ -19,65 +19,7 @@ data Expr
| Dot Expr Expr
| Variable String
| Function String Expr
-
-eval :: Expr -> Maybe Atom
-eval (EAtom a) = Just a
-eval (Add e1 e2) = evalInfix e1 e2 (+?)
-eval (Sub e1 e2) = evalInfix e1 e2 (-?)
-eval (Mul e1 e2) = evalInfix e1 e2 (*?)
-eval (Div e1 e2) = evalInfix e1 e2 (/?)
-eval (Mod e1 e2) = evalInfix e1 e2 (%?)
-eval (Exp e1 e2) = evalInfix e1 e2 (^?)
-eval (Dot e1 e2) = evalInfix e1 e2 (**?)
-eval _ = Nothing
-
-evalInfix :: Expr -> Expr -> (Atom -> Atom -> Maybe Atom) -> Maybe Atom
-evalInfix e1 e2 f = do a <- eval e1
- b <- eval e2
- f a b
-
-infixl 6 +?
-(+?) :: Atom -> Atom -> Maybe Atom
-(Rational a) +? (Rational b) = Just $ Rational (a + b)
-(Imaginary a) +? (Imaginary b) = Just $ Imaginary (a + b)
-_ +? _ = Nothing
-
-infixl 6 -?
-(-?) :: Atom -> Atom -> Maybe Atom
-(Rational a) -? (Rational b) = Just $ Rational (a - b)
-(Imaginary a) -? (Imaginary b) = Just $ Imaginary (a - b)
-_ -? _ = Nothing
-
-infixl 7 *?
-(*?) :: Atom -> Atom -> Maybe Atom
-(Rational a) *? (Rational b) = Just $ Rational (a * b)
-(Rational a) *? (Imaginary b) = Just $ Imaginary (a * b)
-(Imaginary a) *? (Imaginary b) = (Imaginary (a * b)) ^? Rational 2
-_ *? _ = Nothing
-
-infixl 7 /?
-(/?) :: Atom -> Atom -> Maybe Atom
-_ /? (Rational 0) = Nothing
-(Rational a) /? (Rational b) = Just $ Rational (a / b)
-_ /? _ = Nothing
-
-infixl 7 %?
-(%?) :: Atom -> Atom -> Maybe Atom
-_ %? _ = Nothing
-
-infixr 8 ^?
-(^?) :: Atom -> Atom -> Maybe Atom
-(Rational a) ^? (Rational b) = Just $ Rational (a ** b)
-(Imaginary a) ^? (Rational 0) = Just $ Rational a
-(Imaginary a) ^? (Rational 1) = Just $ Imaginary a
-(Imaginary a) ^? (Rational 2) = Just $ Rational (-a)
-(Imaginary a) ^? (Rational 3) = Just $ Imaginary (-a)
-(Imaginary a) ^? (Rational b) = Imaginary a ^? (Rational (b - 4))
-_ ^? _ = Nothing
-
-infixr 8 **?
-(**?) :: Atom -> Atom -> Maybe Atom
-_ **? _ = Nothing
+ deriving (Eq)
instance Show Expr where
show (EAtom a) = show a