@@ -32,14 +32,14 @@ case t of
32
32
33
33
shiftUnder : {args : _} ->
34
34
{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)
37
37
shiftUnder First = weakenNVar (mkSizeOf args) (MkNVar First )
38
38
shiftUnder (Later p) = insertNVar (mkSizeOf args) (MkNVar p)
39
39
40
40
shiftVar : {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))
43
43
shiftVar nvar
44
44
= let out = mkSizeOf outer in
45
45
case locateNVar out nvar of
@@ -49,21 +49,21 @@ shiftVar nvar
49
49
mutual
50
50
shiftBinder : {outer, args : _ } ->
51
51
(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))
54
54
shiftBinder new (CLocal fc p)
55
55
= case shiftVar (MkNVar p) of
56
56
MkNVar p' => CLocal fc (renameVar p')
57
57
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)))
60
60
renameVar = believe_me -- it's the same index, so just the identity at run time
61
61
shiftBinder new (CRef fc n) = CRef fc n
62
62
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
64
64
shiftBinder new (CLet fc n inlineOK val sc)
65
65
= CLet fc n inlineOK (shiftBinder new val)
66
- $ shiftBinder {outer = n :: outer} new sc
66
+ $ shiftBinder {outer = n : % : outer} new sc
67
67
shiftBinder new (CApp fc f args)
68
68
= CApp fc (shiftBinder new f) $ map (shiftBinder new) args
69
69
shiftBinder new (CCon fc ci c tag args)
@@ -87,34 +87,34 @@ mutual
87
87
88
88
shiftBinderConAlt : {outer, args : _ } ->
89
89
(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))
92
92
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
95
95
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'
98
98
99
99
shiftBinderConstAlt : {outer, args : _ } ->
100
100
(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))
103
103
shiftBinderConstAlt new (MkConstAlt c sc) = MkConstAlt c $ shiftBinder new sc
104
104
105
105
-- If there's a lambda inside a case, move the variable so that it's bound
106
106
-- outside the case block so that we can bind it just once outside the block
107
107
liftOutLambda : {args : _} ->
108
108
(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 }
112
112
113
113
-- If all the alternatives start with a lambda, we can have a single lambda
114
114
-- binding outside
115
115
tryLiftOut : (new : Name) ->
116
116
List (CConAlt vars) ->
117
- Maybe (List (CConAlt (new :: vars)))
117
+ Maybe (List (CConAlt (new :% : vars)))
118
118
tryLiftOut new [] = Just []
119
119
tryLiftOut new (MkConAlt n ci t args (CLam fc x sc) :: as)
120
120
= do as' <- tryLiftOut new as
@@ -124,20 +124,20 @@ tryLiftOut _ _ = Nothing
124
124
125
125
tryLiftOutConst : (new : Name) ->
126
126
List (CConstAlt vars) ->
127
- Maybe (List (CConstAlt (new :: vars)))
127
+ Maybe (List (CConstAlt (new :% : vars)))
128
128
tryLiftOutConst new [] = Just []
129
129
tryLiftOutConst new (MkConstAlt c (CLam fc x sc) :: as)
130
130
= do as' <- tryLiftOutConst new as
131
- let sc' = liftOutLambda {args = [] } new sc
131
+ let sc' = liftOutLambda {args = SLNil } new sc
132
132
pure (MkConstAlt c sc' :: as')
133
133
tryLiftOutConst _ _ = Nothing
134
134
135
135
tryLiftDef : (new : Name) ->
136
136
Maybe (CExp vars) ->
137
- Maybe (Maybe (CExp (new :: vars)))
137
+ Maybe (Maybe (CExp (new :% : vars)))
138
138
tryLiftDef new Nothing = Just Nothing
139
139
tryLiftDef new (Just (CLam fc x sc))
140
- = let sc' = liftOutLambda {args = [] } new sc in
140
+ = let sc' = liftOutLambda {args = SLNil } new sc in
141
141
pure (Just sc')
142
142
tryLiftDef _ _ = Nothing
143
143
0 commit comments