From 573967434a8b1cb14ee7de43ec11bd616cf568c6 Mon Sep 17 00:00:00 2001 From: Tom Smeding Date: Tue, 9 Apr 2019 23:30:08 +0200 Subject: Organisation cleanup --- src/Haskell/Env/Cmd.hs | 48 ++++++++++++++++++++++++++++++++++++++++++++++ src/Haskell/Env/Context.hs | 15 +++++++++++++++ 2 files changed, 63 insertions(+) create mode 100644 src/Haskell/Env/Cmd.hs create mode 100644 src/Haskell/Env/Context.hs (limited to 'src/Haskell/Env') diff --git a/src/Haskell/Env/Cmd.hs b/src/Haskell/Env/Cmd.hs new file mode 100644 index 0000000..35a6542 --- /dev/null +++ b/src/Haskell/Env/Cmd.hs @@ -0,0 +1,48 @@ +module Haskell.Env.Cmd where + +import Haskell.AST +import Haskell.Rewrite +import Pretty +import Util + + +data Action = Action RewCmd Name + deriving (Show) + +data RewCmd = CRewrite Name + | CBeta + | CEta + | CCase + | CCaseForce + | CEtaCase + | CCaseCase + | CRepeat RewCmd + deriving (Show) + +instance Pretty Action where + pretty (Action cmd target) = Node ("action " ++ target) [pretty cmd] + +instance Pretty RewCmd where + pretty (CRewrite name) = Leaf ("rew " ++ name) + pretty CBeta = Leaf "beta" + pretty CEta = Leaf "eta" + pretty CCase = Leaf "case" + pretty CCaseForce = Leaf "case!" + pretty CEtaCase = Leaf "etacase" + pretty CCaseCase = Leaf "casecase" + pretty (CRepeat cmd) = Node "repeat" [pretty cmd] + + +exprTransformer :: RewCmd -> Maybe (Expr -> Expr) +exprTransformer = fmap (normalise .) . exprTransformer' + +exprTransformer' :: RewCmd -> Maybe (Expr -> Expr) +exprTransformer' (CRewrite _) = Nothing +exprTransformer' CBeta = Just betared +exprTransformer' CEta = Just etared +exprTransformer' CCase = Just (casered False) +exprTransformer' CCaseForce = Just (casered True) +exprTransformer' CEtaCase = Just etacase +exprTransformer' CCaseCase = Just casecase +exprTransformer' (CRepeat (CRepeat cmd)) = exprTransformer' (CRepeat cmd) +exprTransformer' (CRepeat cmd) = fixpoint <$> exprTransformer' cmd diff --git a/src/Haskell/Env/Context.hs b/src/Haskell/Env/Context.hs new file mode 100644 index 0000000..2e6b6cc --- /dev/null +++ b/src/Haskell/Env/Context.hs @@ -0,0 +1,15 @@ +module Haskell.Env.Context where + +import Haskell.Env +import Haskell.Env.Cmd + + +data Context = Context { cStack :: [(Action, Env)], cBaseEnv :: Env } + deriving (Show) + +topEnv :: Context -> Env +topEnv (Context [] env) = env +topEnv (Context ((_, env):_) _) = env + +pushCtx :: (Action, Env) -> Context -> Context +pushCtx pair ctx = ctx { cStack = pair : cStack ctx } -- cgit v1.2.3-70-g09d2