grammar-combinators-0.2: Text/GrammarCombinators/Utils/CombineProcessors.hs
{-# 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)