@@ -37,38 +37,38 @@ case t of
3737
3838shiftUnder : {args : _} ->
3939 {idx : _} ->
40- (0 p : IsVar n idx (x :: args ++ vars )) ->
41- NVar n (args ++ x :: vars )
40+ (0 p : IsVar n idx (vars ++ args :< x )) ->
41+ NVar n (vars :< x ++ args )
4242shiftUnder First = weakenNVar (mkSizeOf args) (MkNVar First )
4343shiftUnder (Later p) = insertNVar (mkSizeOf args) (MkNVar p)
4444
4545shiftVar : {outer : Scope} -> {args : List Name} ->
46- NVar n (outer ++ (x :: args ++ vars) ) ->
47- NVar n (outer ++ (args ++ x :: vars) )
46+ NVar n ((vars <>< args :< x) ++ outer ) ->
47+ NVar n (( vars :< x <>< args) ++ outer )
4848shiftVar nvar
4949 = let out = mkSizeOf outer in
5050 case locateNVar out nvar of
5151 Left nvar => embed nvar
52- Right (MkNVar p) => weakenNs out (shiftUnder p)
52+ Right (MkNVar p) => weakenNs out (shiftUndersN (mkSizeOf _ ) p)
5353
5454mutual
55+ renameVar : IsVar x i ((vars :< old <>< args) ++ local) ->
56+ IsVar x i ((vars :< new <>< args) ++ local)
57+ renameVar = believe_me -- it's the same index, so just the identity at run time
58+
5559 shiftBinder : {outer, args : _ } ->
5660 (new : Name) ->
57- CExp (outer ++ old :: (args ++ vars) ) ->
58- CExp (outer ++ (args ++ new :: vars) )
61+ CExp (((vars <>< args) :< old) ++ outer ) ->
62+ CExp (( vars :< new <>< args) ++ outer )
5963 shiftBinder new (CLocal fc p)
6064 = case shiftVar (MkNVar p) of
6165 MkNVar p' => CLocal fc (renameVar p')
62- where
63- renameVar : IsVar x i (outer ++ (args ++ (old :: rest))) ->
64- IsVar x i (outer ++ (args ++ (new :: rest)))
65- renameVar = believe_me -- it's the same index, so just the identity at run time
6666 shiftBinder new (CRef fc n) = CRef fc n
6767 shiftBinder {outer} new (CLam fc n sc)
68- = CLam fc n $ shiftBinder {outer = n :: outer } new sc
68+ = CLam fc n $ shiftBinder {outer = outer : < n } new sc
6969 shiftBinder new (CLet fc n inlineOK val sc)
7070 = CLet fc n inlineOK (shiftBinder new val)
71- $ shiftBinder {outer = n :: outer } new sc
71+ $ shiftBinder {outer = outer : < n } new sc
7272 shiftBinder new (CApp fc f args)
7373 = CApp fc (shiftBinder new f) $ map (shiftBinder new) args
7474 shiftBinder new (CCon fc ci c tag args)
@@ -92,34 +92,34 @@ mutual
9292
9393 shiftBinderConAlt : {outer, args : _ } ->
9494 (new : Name) ->
95- CConAlt (outer ++ (x :: args ++ vars) ) ->
96- CConAlt (outer ++ (args ++ new :: vars) )
95+ CConAlt (((vars <>< args) :< old) ++ outer ) ->
96+ CConAlt (( vars :< new <>< args) ++ outer )
9797 shiftBinderConAlt new (MkConAlt n ci t args' sc)
98- = let sc' : CExp ((args' ++ outer ) ++ (x :: args ++ vars ))
99- = rewrite sym (appendAssociative args' outer (x :: args ++ vars)) in sc in
98+ = let sc' : CExp (((vars <>< args) :< old ) ++ (outer <>< args' ))
99+ = rewrite sym $ snocAppendFishAssociative (vars <>< args : < old) outer args' in sc in
100100 MkConAlt n ci t args' $
101- rewrite (appendAssociative args' outer (args ++ new :: vars))
102- in shiftBinder new {outer = args' ++ outer } sc'
101+ rewrite snocAppendFishAssociative ( vars : < new <>< args) outer args'
102+ in shiftBinder new {outer = outer <>< args' } sc'
103103
104104 shiftBinderConstAlt : {outer, args : _ } ->
105105 (new : Name) ->
106- CConstAlt (outer ++ (x :: args ++ vars) ) ->
107- CConstAlt (outer ++ (args ++ new :: vars) )
106+ CConstAlt (((vars <>< args) :< old) ++ outer ) ->
107+ CConstAlt (( vars :< new <>< args) ++ outer )
108108 shiftBinderConstAlt new (MkConstAlt c sc) = MkConstAlt c $ shiftBinder new sc
109109
110110-- If there's a lambda inside a case, move the variable so that it's bound
111111-- outside the case block so that we can bind it just once outside the block
112112liftOutLambda : {args : _} ->
113113 (new : Name) ->
114- CExp (old :: args ++ vars ) ->
115- CExp (args ++ new :: vars )
114+ CExp (vars <>< args :< old ) ->
115+ CExp (vars :< new <>< args )
116116liftOutLambda = shiftBinder {outer = ScopeEmpty }
117117
118118-- If all the alternatives start with a lambda, we can have a single lambda
119119-- binding outside
120120tryLiftOut : (new : Name) ->
121121 List (CConAlt vars) ->
122- Maybe (List (CConAlt (new :: vars )))
122+ Maybe (List (CConAlt (vars :< new )))
123123tryLiftOut new [] = Just []
124124tryLiftOut new (MkConAlt n ci t args (CLam fc x sc) :: as)
125125 = do as' <- tryLiftOut new as
@@ -129,7 +129,7 @@ tryLiftOut _ _ = Nothing
129129
130130tryLiftOutConst : (new : Name) ->
131131 List (CConstAlt vars) ->
132- Maybe (List (CConstAlt (new :: vars )))
132+ Maybe (List (CConstAlt (vars :< new )))
133133tryLiftOutConst new [] = Just []
134134tryLiftOutConst new (MkConstAlt c (CLam fc x sc) :: as)
135135 = do as' <- tryLiftOutConst new as
@@ -139,7 +139,7 @@ tryLiftOutConst _ _ = Nothing
139139
140140tryLiftDef : (new : Name) ->
141141 Maybe (CExp vars) ->
142- Maybe (Maybe (CExp (new :: vars )))
142+ Maybe (Maybe (CExp (vars :< new )))
143143tryLiftDef new Nothing = Just Nothing
144144tryLiftDef new (Just (CLam fc x sc))
145145 = let sc' = liftOutLambda {args = []} new sc in
@@ -318,8 +318,8 @@ doCaseOfCase fc x xalts xdef alts def
318318 updateAlt (MkConAlt n ci t args sc)
319319 = MkConAlt n ci t args $
320320 CConCase fc sc
321- (map (weakenNs (mkSizeOf args)) alts)
322- (map (weakenNs (mkSizeOf args)) def)
321+ (map (weakensN (mkSizeOf args)) alts)
322+ (map (weakensN (mkSizeOf args)) def)
323323
324324 updateDef : CExp vars -> CExp vars
325325 updateDef sc = CConCase fc sc alts def
0 commit comments