{-# LANGUAGE OverloadedStrings #-} module Lists where import Prelude hiding (reverse) import Language.REST.Op import Language.REST.Core import Language.REST.Types import qualified Language.REST.MetaTerm as MT import DSL import qualified Data.HashSet as S xs = MT.Var "xs" ys = MT.Var "ys" nil = MT.RWApp "nil" [] (.:) t1 t2 = MT.RWApp "cons" [t1, t2] reverse t = MT.RWApp "reverse" [t] (.++) lhs rhs = MT.RWApp "append" [lhs, rhs] evalRWs = S.fromList [ reverse (x .: xs) ~> reverse xs .++ (x .: nil) , reverse nil ~> nil , nil .++ xs ~> xs , (x .: xs) .++ ys ~> x .: (xs .++ ys) , reverse (reverse (MT.RWApp "xs" [])) ~> MT.RWApp "xs" [] ] userRWs = S.fromList [ reverse (xs .++ ys) ~> (reverse ys) .++ (reverse xs) , (reverse ys) .++ (reverse xs) ~> reverse (xs .++ ys) ]