git.iko.soy/rowtype-yoga/purescript-backend-optimizer
on main help sign in
27 lines 688 B history raw
1-- @inline export traverseFun1 arity=1
2-- @inline export rewriteBottomUpM arity=1
3module Snapshot.VanLaarhovenTraversals01 where
5import Prelude
7import Data.Identity (Identity(..))
8import Safe.Coerce (coerce)
10data Fun
11 = Abs String Fun
12 | App Fun Fun
14traverseFun1 :: forall f. Applicative f => (Fun -> f Fun) -> Fun -> f Fun
15traverseFun1 k = case _ of
16 Abs id a ->
17 Abs id <$> k a
18 App a b ->
19 App <$> k a <*> k b
21rewriteBottomUpM :: forall m. Monad m => (Fun -> m Fun) -> Fun -> m Fun
22rewriteBottomUpM k = k <=< go
23 where
24 go a = traverseFun1 (k <=< go) a
26rewriteBottomUp :: (Fun -> Fun) -> Fun -> Fun
27rewriteBottomUp = coerce (rewriteBottomUpM :: _ -> _ -> Identity _)