packages feed

ruler-0.4.0.0: src/Expr/IsRwAG.cag

-------------------------------------------------------------------------
-- Is Expr a complex (non variable expr)? Then it will be used only for parameterized rewrites
-------------------------------------------------------------------------

%%[1 ag

ATTR Expr AGExprItf [ | | exprIsRw: ExprIsRw ]

SEM Expr
  | Op              lhs     .   exprIsRw    =   let nm e = case e of {ExprIsRw n | n /= nmApp -> (`nmApd` n) ; _ -> id}
                                                in  ExprIsRw . {- nm @lExpr.exprIsRw . -} nm @rExpr.exprIsRw $ @nm
  | App             lhs     .   exprIsRw    =   ExprIsRw nmApp
  | Var             lhs     .   exprIsRw    =   ExprIsVar @nm
  | * - Op Var AppTop App
                    lhs     .   exprIsRw    =   ExprIsOther

%%]