diff --git a/common/FlowGraph.hs b/common/FlowGraph.hs index 4bd48e4..32d5719 100644 --- a/common/FlowGraph.hs +++ b/common/FlowGraph.hs @@ -314,6 +314,14 @@ decomp23 con f1 = decomp3 con return f1 return decomp33 :: (Monad m, Data a, Typeable a0, Typeable a1, Typeable a2) => (a0 -> a1 -> a2 -> a) -> (a2 -> m a2) -> (a -> m a) decomp33 con f2 = decomp3 con return return f2 +decomp44 :: (Monad m, Data a, Typeable a0, Typeable a1, Typeable a2, Typeable a3) => + (a0 -> a1 -> a2 -> a3 -> a) -> (a3 -> m a3) -> (a -> m a) +decomp44 con f3 = decomp4 con return return return f3 + +decomp55 :: (Monad m, Data a, Typeable a0, Typeable a1, Typeable a2, Typeable a3, Typeable a4) => + (a0 -> a1 -> a2 -> a3 -> a4 -> a) -> (a4 -> m a4) -> (a -> m a) +decomp55 con f4 = decomp5 con return return return return f4 + route22 :: (Monad m, Data a, Typeable a0, Typeable a1) => ASTModifier m a -> (a0 -> a1 -> a) -> ASTModifier m a1 route22 route con = route @-> (decomp22 con) @@ -322,3 +330,11 @@ route23 route con = route @-> (decomp23 con) route33 :: (Monad m, Data a, Typeable a0, Typeable a1, Typeable a2) => ASTModifier m a -> (a0 -> a1 -> a2 -> a) -> ASTModifier m a2 route33 route con = route @-> (decomp33 con) + +route44 :: (Monad m, Data a, Typeable a0, Typeable a1, Typeable a2, Typeable a3) => + ASTModifier m a -> (a0 -> a1 -> a2 -> a3 -> a) -> ASTModifier m a3 +route44 route con = route @-> (decomp44 con) + +route55 :: (Monad m, Data a, Typeable a0, Typeable a1, Typeable a2, Typeable a3, Typeable a4) => + ASTModifier m a -> (a0 -> a1 -> a2 -> a3 -> a4 -> a) -> ASTModifier m a4 +route55 route con = route @-> (decomp55 con) diff --git a/common/TreeUtils.hs b/common/TreeUtils.hs index cd7c1bb..9922b36 100644 --- a/common/TreeUtils.hs +++ b/common/TreeUtils.hs @@ -25,7 +25,7 @@ module TreeUtils ( mkPattern, stopCaringPattern, namePattern, nameAndStopCaringPattern, checkTreeForConstr, con0, con1, con2, con3, con4, con5, con6, con7 - , decomp1, decomp2, decomp3 + , decomp1, decomp2, decomp3, decomp4, decomp5 ) where import Control.Monad.State @@ -408,3 +408,11 @@ decomp2 con f0 f1 = gmapFuncs [mkM' f0, mkM' f1] decomp3 :: (Monad m, Data a, Typeable a0, Typeable a1, Typeable a2) => (a0 -> a1 -> a2 -> a) -> (a0 -> m a0) -> (a1 -> m a1) -> (a2 -> m a2) -> (a -> m a) decomp3 con f0 f1 f2 = gmapFuncs [mkM' f0, mkM' f1, mkM' f2] +decomp4 :: (Monad m, Data a, Typeable a0, Typeable a1, Typeable a2, Typeable a3) => + (a0 -> a1 -> a2 -> a3 -> a) -> (a0 -> m a0) -> (a1 -> m a1) -> (a2 -> m a2) -> (a3 -> m a3) -> (a -> m a) +decomp4 con f0 f1 f2 f3 = gmapFuncs [mkM' f0, mkM' f1, mkM' f2, mkM' f3] + +decomp5 :: (Monad m, Data a, Typeable a0, Typeable a1, Typeable a2, Typeable a3, Typeable a4) => + (a0 -> a1 -> a2 -> a3 -> a4 -> a) -> (a0 -> m a0) -> (a1 -> m a1) -> (a2 -> m a2) -> (a3 -> m a3) -> (a4 -> m a4) -> (a -> m a) +decomp5 con f0 f1 f2 f3 f4 = gmapFuncs [mkM' f0, mkM' f1, mkM' f2, mkM' f3, mkM' f4] +