{-# LANGUAGE TypeOperators #-} {-# LANGUAGE RankNTypes #-} {-# LANGUAGE KindSignatures #-} module Text.GrammarCombinators.Utils.CombineProcessors ( CombineFam (Combine) , combineProcessors ) where import Text.GrammarCombinators.Base data CombineFam r1 r2 ix = Combine (r1 ix) (r2 ix) -- | Combine two semantic processors into a single one that tuples -- their respective values. combineProcessors :: forall (phi :: * -> *) rr1 r1 rr2 r2. GProcessor phi rr1 r1 -> GProcessor phi rr2 r2 -> GProcessor phi (CombineFam rr1 rr2) (CombineFam r1 r2) combineProcessors proc1 proc2 idx (Combine rrv1 rrv2) = Combine (proc1 idx rrv1) (proc2 idx rrv2)