Major progress on laws

This commit is contained in:
Pranshu Sharma 2025-05-25 18:26:26 +10:00
parent 5113241a63
commit e338e3a738

View file

@ -5,11 +5,17 @@ import Expr
import Parser
data Law = Law LawName Equation
deriving Show
type LawName = String
type Equation = (Expr,Expr)
instance Show Law where
showsPrec _ (Law name (e1, e2)) =
showString (name ++ ": ")
. shows e1
. showString " = "
. shows e2
law :: Parser Law
law = do name <- upto ':'
eqn <- equation
@ -20,3 +26,21 @@ equation = do lh <- expr
symbol "="
rh <- expr
return (lh, rh)
sortLaws :: [Law] -> [Law]
sortLaws laws = simple ++ others ++ defn
where (simple, nonsimple) = partition isSimple laws
(defn, others) = partition isDefn nonsimple
isSimple, isDefn :: Law -> Bool
isSimple (Law _ (Compose a, Compose b))
= length a > length b
isDefn d = case d of
(Law _ (Compose [Con f es], _)) -> all Calculator.isVar es
_ -> False
isVar v = case v of
(Compose [Var _]) -> True
_ -> False