zipper-0.4: examples/ASTZipper.hs
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE GADTs #-}
module ASTZipper where
import Data.Maybe (fromJust)
import Control.Arrow ((>>>))
import Control.Monad ((>=>))
import AST
import ASTUse
import Generics.MultiRec.Zipper
-- | Example expression
example = Let ("x" := Mul (Const 6) (Const 9))
(Add (EVar "x") (EVar "y"))
-- | Test for the generic zipper
testZipper :: Maybe Expr
testZipper =
enter Expr >>>
down >=>
down >=>
right >=>
update solve >>>
leave >>>
return $ example
where
solve :: AST ix -> ix -> ix
solve Expr _ = Const 42
solve _ x = x