CompOps

module CompOps where
import CompF(compF)
import ParF(parF)
import CompFfun
import Fudget
import SerCompF(serCompF)
import CompSP(serCompSP,compEitherSP)
import ParSP(parSP)

-- Change priority??
infixl 5 >+<
infixl 5 >*<
infixr 4 >==<
infixr 8 -==-, -+-, -*-
infixr 7 >^^=<
infixr 5 >..=<
infixl 6 >=^^<
infixl 6 >=..<
infixr 7 >^=<
infixr 6 >.=<
infixl 6 >=^<
infixl 6 >=.<

-- Infix operators for common stream processor combinators.

sp1 -==- sp2 = serCompSP sp1 sp2
sp1 -+- sp2 = compEitherSP sp1 sp2
sp1 -*- sp2 = parSP sp1 sp2

-- Infix operators for common fudget combinators.

w1 >+< w2 = compF w1 w2
w1 >*< w2 = parF w1 w2
w1 >==< w2 = serCompF w1 w2

(>^^=<) :: (SP a b) -> (F e a) -> F e b
f >^^=< w = postProcessHigh f w
(>=^^<) :: (F c d) -> (SP e c) -> F e d
w >=^^< f = preProcessHigh w f
(>^=<) :: (a -> b) -> (F e a) -> F e b
f >^=< w = postMapHigh f w
(>=^<) :: (F c d) -> (e -> c) -> F e d
w >=^< f = preMapHigh w f

f >..=< w = postProcessLow f w
w >=..< f = preProcessLow w f
f >.=< w = postMapLow f w
w >=.< f = preMapLow w f