@@ -267,10 +267,13 @@ inlineFnComposition :: (MonadSupply m) => Cpp -> m Cpp
267inlineFnComposition = everywhereOnCppTopDownM convert
267inlineFnComposition = everywhereOnCppTopDownM convert
269 convert :: (MonadSupply m) => Cpp -> m Cpp
269 convert :: (MonadSupply m) => Cpp -> m Cpp
270+ convert (CppApp fn [dict', x, y, z])
271+ | isFnCompose dict' fn = return $ CppApp x [CppApp y [z]]
272+ | isFnComposeFlipped dict' fn = return $ CppApp y [CppApp x [z]]
270 convert (CppApp (CppApp (CppApp (CppApp fn [dict']) [x]) [y]) [z])
273 convert (CppApp (CppApp (CppApp (CppApp fn [dict']) [x]) [y]) [z])
271 | isFnCompose dict' fn = return $ CppApp x [CppApp y [z]]
274 | isFnCompose dict' fn = return $ CppApp x [CppApp y [z]]
272 | isFnComposeFlipped dict' fn = return $ CppApp y [CppApp x [z]]
275 | isFnComposeFlipped dict' fn = return $ CppApp y [CppApp x [z]]
273− convert (CppApp (CppApp (CppApp fn [dict']) [x]) [y])
276+ convert (CppApp fn [dict', x, y])
274 | isFnCompose dict' fn = do
277 | isFnCompose dict' fn = do
275 arg <- freshName
278 arg <- freshName
276 return $ CppLambda [CppCaptureAll] [(arg, constAnyRef)] Nothing (CppBlock [CppReturn $ CppApp x [CppApp y [CppVar arg]]])
279 return $ CppLambda [CppCaptureAll] [(arg, constAnyRef)] Nothing (CppBlock [CppReturn $ CppApp x [CppApp y [CppVar arg]]])