{-# LANGUAGE OverloadedStrings #-} module Compiler where import qualified Arith as A import DSL import Language.REST.Internal.Rewrite (Rewrite) import Language.REST.MetaTerm import Language.REST.Op import qualified Data.HashSet as S import Prelude hiding (repeat, seq) repeat :: MetaTerm -> MetaTerm -> MetaTerm repeat n op = RWApp (Op "repeat") [n, op] seq :: MetaTerm -> MetaTerm -> MetaTerm seq op1 op2 = RWApp (Op "seq") [op1, op2] nop :: MetaTerm nop = RWApp (Op "nop") [] userRWs :: S.HashSet Rewrite userRWs = S.union A.userRWs (S.fromList $ [ seq x nop ~> x , seq nop x ~> x , repeat zero' x ~> nop ] ++ (repeat (suc' y) x <~> seq x (repeat y x)) -- ++ (repeat (suc' y) x <~> seq (repeat y x) x) ++ (repeat (suc' (suc' zero')) x <~> seq x x)) evalRWs :: S.HashSet Rewrite evalRWs = S.empty -- S.fromList [ ]