packages feed

rest-rewrite-0.1: src/Lists.hs

{-# 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)
  ]