{-# LANGUAGE OverloadedStrings #-}

module Compiler where

import Data.Text
import qualified Arith as A
import DSL
import Language.REST.MetaTerm
import Language.REST.Op

import qualified Data.HashSet as S
import Prelude hiding (repeat, seq)

repeat n op = RWApp (Op "repeat") [n, op]
seq op1 op2 = RWApp (Op "seq") [op1, op2]
nop         = RWApp (Op "nop") []


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.empty -- S.fromList [  ]