@@ -141,6 +141,38 @@ reduce C (p1 : p2 : p3 : _) = do
141
141
(_ :@: zP) <- readSTRef p3
142
142
node1 <- newSTRef $ xP :@: zP
143
143
writeSTRef p3 (node1 :@: yP)
144
+
145
+ -- B' P Q R S = P Q (R S)
146
+ reduce B' (p : q : r : s : _) = do
147
+ (_ :@: pP) <- readSTRef p
148
+ (_ :@: qP) <- readSTRef q
149
+ (_ :@: rP) <- readSTRef r
150
+ (_ :@: sP) <- readSTRef s
151
+ node1 <- newSTRef $ pP :@: qP
152
+ node2 <- newSTRef $ rP :@: sP
153
+ writeSTRef s (node1 :@: node2)
154
+
155
+ -- C' P Q R S = P (Q S) R
156
+ reduce C' (p : q : r : s : _) = do
157
+ (_ :@: pP) <- readSTRef p
158
+ (_ :@: qP) <- readSTRef q
159
+ (_ :@: rP) <- readSTRef r
160
+ (_ :@: sP) <- readSTRef s
161
+ node1 <- newSTRef $ qP :@: sP
162
+ node2 <- newSTRef $ pP :@: node1
163
+ writeSTRef s (node2 :@: rP)
164
+
165
+ -- S' P Q R S = P (Q S) (R S)
166
+ reduce S' (p : q : r : s : _) = do
167
+ (_ :@: pP) <- readSTRef p
168
+ (_ :@: qP) <- readSTRef q
169
+ (_ :@: rP) <- readSTRef r
170
+ (_ :@: sP) <- readSTRef s
171
+ node1 <- newSTRef $ qP :@: sP
172
+ node2 <- newSTRef $ pP :@: node1
173
+ node3 <- newSTRef $ rP :@: sP
174
+ writeSTRef s (node2 :@: node3)
175
+
144
176
reduce Y (p1 : _) = do
145
177
(_yP :@: fP) <- readSTRef p1
146
178
writeSTRef p1 (fP :@: p1)
0 commit comments