🚂 Equality and power
This commit is contained in:
@ -96,12 +96,26 @@ pLExp =
|
|||||||
pFExp
|
pFExp
|
||||||
]
|
]
|
||||||
|
|
||||||
pExp1 :: Parser Exp
|
pPExp :: Parser Exp
|
||||||
pExp1 = pLExp >>= chain
|
pPExp = pLExp >>= chain
|
||||||
where
|
where
|
||||||
chain x =
|
chain x =
|
||||||
choice
|
choice
|
||||||
[ do
|
[
|
||||||
|
do
|
||||||
|
lString "**"
|
||||||
|
y <- pPExp
|
||||||
|
chain $ Pow x y,
|
||||||
|
pure x
|
||||||
|
]
|
||||||
|
|
||||||
|
pExp1 :: Parser Exp
|
||||||
|
pExp1 = pPExp >>= chain
|
||||||
|
where
|
||||||
|
chain x =
|
||||||
|
choice
|
||||||
|
[
|
||||||
|
do
|
||||||
lString "*"
|
lString "*"
|
||||||
y <- pLExp
|
y <- pLExp
|
||||||
chain $ Mul x y,
|
chain $ Mul x y,
|
||||||
@ -125,6 +139,10 @@ pExp0 = pExp1 >>= chain
|
|||||||
lString "-"
|
lString "-"
|
||||||
y <- pExp1
|
y <- pExp1
|
||||||
chain $ Sub x y,
|
chain $ Sub x y,
|
||||||
|
do
|
||||||
|
lString "=="
|
||||||
|
y <- pExp1
|
||||||
|
chain $ Eql x y,
|
||||||
pure x
|
pure x
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -70,5 +70,17 @@ tests =
|
|||||||
[ parserTest "x y" $ Apply (Var "x") (Var "y"),
|
[ parserTest "x y" $ Apply (Var "x") (Var "y"),
|
||||||
parserTest "x y z" $ Apply (Apply (Var "x") (Var "y")) (Var "z"),
|
parserTest "x y z" $ Apply (Apply (Var "x") (Var "y")) (Var "z"),
|
||||||
parserTest "x (y z)" $ Apply (Var "x") (Apply (Var "y") (Var "z"))
|
parserTest "x (y z)" $ Apply (Var "x") (Apply (Var "y") (Var "z"))
|
||||||
|
],
|
||||||
|
testGroup
|
||||||
|
"Eql"
|
||||||
|
[ parserTest "x == y" $ Eql (Var "x") (Var "y"),
|
||||||
|
parserTest "x == y == z" $ Eql (Eql (Var "x") (Var "y")) (Var "z"),
|
||||||
|
parserTest "x + y == z * x" $ Eql (Add (Var "x") (Var "y")) (Mul (Var "z") (Var "x"))
|
||||||
|
],
|
||||||
|
testGroup
|
||||||
|
"Eql"
|
||||||
|
[ parserTest "x ** y" $ Pow (Var "x") (Var "y"),
|
||||||
|
parserTest "x ** y ** z" $ Pow (Var "x") (Pow (Var "y") (Var "z")),
|
||||||
|
parserTest "x + y ** z * x" $ Add (Var "x") (Mul (Pow (Var "y") (Var "z")) (Var "x"))
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
|
Reference in New Issue
Block a user