Added various 4 and 5 parameter versions of the routing functions for building AST-modifying functions
This commit is contained in:
parent
7c4b87e221
commit
9dfa1611e0
|
@ -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)
|
||||
|
|
|
@ -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]
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user