@@ -32,14 +32,14 @@ case t of
3232
3333shiftUnder : {args : _} ->
3434 {idx : _} ->
35- (0 p : IsVar n idx (x :: args ++ vars)) ->
36- NVar n (args ++ x :: vars)
35+ (0 p : IsVar n idx (x :% : args +% + vars)) ->
36+ NVar n (args +% + x :% : vars)
3737shiftUnder First = weakenNVar (mkSizeOf args) (MkNVar First )
3838shiftUnder (Later p) = insertNVar (mkSizeOf args) (MkNVar p)
3939
4040shiftVar : {outer, args : Scope} ->
41- NVar n (outer ++ (x :: args ++ vars)) ->
42- NVar n (outer ++ (args ++ x :: vars))
41+ NVar n (outer +% + (x :% : args +% + vars)) ->
42+ NVar n (outer +% + (args +% + x :% : vars))
4343shiftVar nvar
4444 = let out = mkSizeOf outer in
4545 case locateNVar out nvar of
@@ -49,21 +49,21 @@ shiftVar nvar
4949mutual
5050 shiftBinder : {outer, args : _ } ->
5151 (new : Name) ->
52- CExp (outer ++ old :: (args ++ vars)) ->
53- CExp (outer ++ (args ++ new :: vars))
52+ CExp (outer +% + old :% : (args +% + vars)) ->
53+ CExp (outer +% + (args +% + new :% : vars))
5454 shiftBinder new (CLocal fc p)
5555 = case shiftVar (MkNVar p) of
5656 MkNVar p' => CLocal fc (renameVar p')
5757 where
58- renameVar : IsVar x i (outer ++ (args ++ (old :: rest))) ->
59- IsVar x i (outer ++ (args ++ (new :: rest)))
58+ renameVar : IsVar x i (outer +% + (args +% + (old :% : rest))) ->
59+ IsVar x i (outer +% + (args +% + (new :% : rest)))
6060 renameVar = believe_me -- it's the same index, so just the identity at run time
6161 shiftBinder new (CRef fc n) = CRef fc n
6262 shiftBinder {outer} new (CLam fc n sc)
63- = CLam fc n $ shiftBinder {outer = n :: outer} new sc
63+ = CLam fc n $ shiftBinder {outer = n : % : outer} new sc
6464 shiftBinder new (CLet fc n inlineOK val sc)
6565 = CLet fc n inlineOK (shiftBinder new val)
66- $ shiftBinder {outer = n :: outer} new sc
66+ $ shiftBinder {outer = n : % : outer} new sc
6767 shiftBinder new (CApp fc f args)
6868 = CApp fc (shiftBinder new f) $ map (shiftBinder new) args
6969 shiftBinder new (CCon fc ci c tag args)
@@ -87,34 +87,34 @@ mutual
8787
8888 shiftBinderConAlt : {outer, args : _ } ->
8989 (new : Name) ->
90- CConAlt (outer ++ (x :: args ++ vars)) ->
91- CConAlt (outer ++ (args ++ new :: vars))
90+ CConAlt (outer +% + (x :% : args +% + vars)) ->
91+ CConAlt (outer +% + (args +% + new :% : vars))
9292 shiftBinderConAlt new (MkConAlt n ci t args' sc)
93- = let sc' : CExp ((args' ++ outer) ++ (x :: args ++ vars))
94- = rewrite sym (appendAssociative args' outer (x :: args ++ vars)) in sc in
93+ = let sc' : CExp ((args' +% + outer) +% + (x :% : args +% + vars))
94+ = rewrite sym (appendAssociative args' outer (x : % : args +% + vars)) in sc in
9595 MkConAlt n ci t args' $
96- rewrite (appendAssociative args' outer (args ++ new :: vars))
97- in shiftBinder new {outer = args' ++ outer} sc'
96+ rewrite (appendAssociative args' outer (args +% + new : % : vars))
97+ in shiftBinder new {outer = args' +% + outer} sc'
9898
9999 shiftBinderConstAlt : {outer, args : _ } ->
100100 (new : Name) ->
101- CConstAlt (outer ++ (x :: args ++ vars)) ->
102- CConstAlt (outer ++ (args ++ new :: vars))
101+ CConstAlt (outer +% + (x :% : args +% + vars)) ->
102+ CConstAlt (outer +% + (args +% + new :% : vars))
103103 shiftBinderConstAlt new (MkConstAlt c sc) = MkConstAlt c $ shiftBinder new sc
104104
105105-- If there's a lambda inside a case, move the variable so that it's bound
106106-- outside the case block so that we can bind it just once outside the block
107107liftOutLambda : {args : _} ->
108108 (new : Name) ->
109- CExp (old :: args ++ vars) ->
110- CExp (args ++ new :: vars)
111- liftOutLambda = shiftBinder {outer = [] }
109+ CExp (old :% : args +% + vars) ->
110+ CExp (args +% + new :% : vars)
111+ liftOutLambda = shiftBinder {outer = SLNil }
112112
113113-- If all the alternatives start with a lambda, we can have a single lambda
114114-- binding outside
115115tryLiftOut : (new : Name) ->
116116 List (CConAlt vars) ->
117- Maybe (List (CConAlt (new :: vars)))
117+ Maybe (List (CConAlt (new :% : vars)))
118118tryLiftOut new [] = Just []
119119tryLiftOut new (MkConAlt n ci t args (CLam fc x sc) :: as)
120120 = do as' <- tryLiftOut new as
@@ -124,20 +124,20 @@ tryLiftOut _ _ = Nothing
124124
125125tryLiftOutConst : (new : Name) ->
126126 List (CConstAlt vars) ->
127- Maybe (List (CConstAlt (new :: vars)))
127+ Maybe (List (CConstAlt (new :% : vars)))
128128tryLiftOutConst new [] = Just []
129129tryLiftOutConst new (MkConstAlt c (CLam fc x sc) :: as)
130130 = do as' <- tryLiftOutConst new as
131- let sc' = liftOutLambda {args = [] } new sc
131+ let sc' = liftOutLambda {args = SLNil } new sc
132132 pure (MkConstAlt c sc' :: as')
133133tryLiftOutConst _ _ = Nothing
134134
135135tryLiftDef : (new : Name) ->
136136 Maybe (CExp vars) ->
137- Maybe (Maybe (CExp (new :: vars)))
137+ Maybe (Maybe (CExp (new :% : vars)))
138138tryLiftDef new Nothing = Just Nothing
139139tryLiftDef new (Just (CLam fc x sc))
140- = let sc' = liftOutLambda {args = [] } new sc in
140+ = let sc' = liftOutLambda {args = SLNil } new sc in
141141 pure (Just sc')
142142tryLiftDef _ _ = Nothing
143143
0 commit comments