module CompFfun where
import CompSP
import Fudget
import Message
--import Path(Path(..))
--import SP

postProcessHigh :: SP a ho -> F hi a -> F hi ho
postProcessHigh SP a ho
postsp (F FSP hi a
sp) = FSP hi ho -> F hi ho
forall hi ho. FSP hi ho -> F hi ho
F{-ff-} (SP a ho -> FSP hi a -> FSP hi ho
forall a b c d e. SP a b -> Fa c d e a -> Fa c d e b
postProcessHigh' SP a ho
postsp FSP hi a
sp)
postProcessLow :: SP TCommand TCommand -> F hi ho -> F hi ho
postProcessLow SP TCommand TCommand
postsp (F FSP hi ho
sp) = FSP hi ho -> F hi ho
forall hi ho. FSP hi ho -> F hi ho
F{-ff-} (SP TCommand TCommand -> FSP hi ho -> FSP hi ho
forall a b c d e. SP a b -> Fa c a d e -> Fa c b d e
postProcessLow' SP TCommand TCommand
postsp FSP hi ho
sp)
preProcessHigh :: F c ho -> SP hi c -> F hi ho
preProcessHigh (F FSP c ho
sp) SP hi c
presp = FSP hi ho -> F hi ho
forall hi ho. FSP hi ho -> F hi ho
F{-ff-} (FSP c ho -> SP hi c -> FSP hi ho
forall a b c d e. Fa a b c d -> SP e c -> Fa a b e d
preProcessHigh' FSP c ho
sp SP hi c
presp)
preProcessLow :: F hi ho -> SP TEvent TEvent -> F hi ho
preProcessLow (F FSP hi ho
sp) SP TEvent TEvent
presp = FSP hi ho -> F hi ho
forall hi ho. FSP hi ho -> F hi ho
F{-ff-} (FSP hi ho -> SP TEvent TEvent -> FSP hi ho
forall a b c d e. Fa a b c d -> SP e a -> Fa e b c d
preProcessLow' FSP hi ho
sp SP TEvent TEvent
presp)
preMapHigh :: F c ho -> (hi -> c) -> F hi ho
preMapHigh (F FSP c ho
sp) hi -> c
pre = FSP hi ho -> F hi ho
forall hi ho. FSP hi ho -> F hi ho
F{-ff-} (FSP c ho -> (hi -> c) -> FSP hi ho
forall a b c d e. Fa a b c d -> (e -> c) -> Fa a b e d
preMapHigh' FSP c ho
sp hi -> c
pre)
postMapHigh :: (a -> ho) -> F hi a -> F hi ho
postMapHigh a -> ho
post (F FSP hi a
sp) = FSP hi ho -> F hi ho
forall hi ho. FSP hi ho -> F hi ho
F{-ff-} ((a -> ho) -> FSP hi a -> FSP hi ho
forall a b c d e. (a -> b) -> Fa c d e a -> Fa c d e b
postMapHigh' a -> ho
post FSP hi a
sp)
preMapLow :: F hi ho -> (TEvent -> TEvent) -> F hi ho
preMapLow (F FSP hi ho
sp) TEvent -> TEvent
pre = FSP hi ho -> F hi ho
forall hi ho. FSP hi ho -> F hi ho
F{-ff-} (FSP hi ho -> (TEvent -> TEvent) -> FSP hi ho
forall a b c d e. Fa a b c d -> (e -> a) -> Fa e b c d
preMapLow' FSP hi ho
sp TEvent -> TEvent
pre)
postMapLow :: (TCommand -> TCommand) -> F hi ho -> F hi ho
postMapLow TCommand -> TCommand
post (F FSP hi ho
sp) = FSP hi ho -> F hi ho
forall hi ho. FSP hi ho -> F hi ho
F{-ff-} ((TCommand -> TCommand) -> FSP hi ho -> FSP hi ho
forall a b c d e. (a -> b) -> Fa c a d e -> Fa c b d e
postMapLow' TCommand -> TCommand
post FSP hi ho
sp)

postProcessHighK :: SP a ho -> K hi a -> K hi ho
postProcessHighK SP a ho
postsp (K KSP hi a
sp) = KSP hi ho -> K hi ho
forall hi ho. KSP hi ho -> K hi ho
K{-kk-} (SP a ho -> KSP hi a -> KSP hi ho
forall a b c d e. SP a b -> Fa c d e a -> Fa c d e b
postProcessHigh' SP a ho
postsp KSP hi a
sp)
postProcessLowK :: SP FRequest FRequest -> K hi ho -> K hi ho
postProcessLowK SP FRequest FRequest
postsp (K KSP hi ho
sp) = KSP hi ho -> K hi ho
forall hi ho. KSP hi ho -> K hi ho
K{-kk-} (SP FRequest FRequest -> KSP hi ho -> KSP hi ho
forall a b c d e. SP a b -> Fa c a d e -> Fa c b d e
postProcessLow' SP FRequest FRequest
postsp KSP hi ho
sp)
preProcessHighK :: K c ho -> SP hi c -> K hi ho
preProcessHighK (K KSP c ho
sp) SP hi c
presp = KSP hi ho -> K hi ho
forall hi ho. KSP hi ho -> K hi ho
K{-kk-} (KSP c ho -> SP hi c -> KSP hi ho
forall a b c d e. Fa a b c d -> SP e c -> Fa a b e d
preProcessHigh' KSP c ho
sp SP hi c
presp)
preProcessLowK :: K hi ho -> SP FResponse FResponse -> K hi ho
preProcessLowK (K KSP hi ho
sp) SP FResponse FResponse
presp = KSP hi ho -> K hi ho
forall hi ho. KSP hi ho -> K hi ho
K{-kk-} (KSP hi ho -> SP FResponse FResponse -> KSP hi ho
forall a b c d e. Fa a b c d -> SP e a -> Fa e b c d
preProcessLow' KSP hi ho
sp SP FResponse FResponse
presp)
preMapHighK :: K c ho -> (hi -> c) -> K hi ho
preMapHighK (K KSP c ho
sp) hi -> c
pre = KSP hi ho -> K hi ho
forall hi ho. KSP hi ho -> K hi ho
K{-kk-} (KSP c ho -> (hi -> c) -> KSP hi ho
forall a b c d e. Fa a b c d -> (e -> c) -> Fa a b e d
preMapHigh' KSP c ho
sp hi -> c
pre)
postMapHighK :: (a -> ho) -> K hi a -> K hi ho
postMapHighK a -> ho
post (K KSP hi a
sp) = KSP hi ho -> K hi ho
forall hi ho. KSP hi ho -> K hi ho
K{-kk-} ((a -> ho) -> KSP hi a -> KSP hi ho
forall a b c d e. (a -> b) -> Fa c d e a -> Fa c d e b
postMapHigh' a -> ho
post KSP hi a
sp)
preMapLowK :: K hi ho -> (FResponse -> FResponse) -> K hi ho
preMapLowK (K KSP hi ho
sp) FResponse -> FResponse
pre = KSP hi ho -> K hi ho
forall hi ho. KSP hi ho -> K hi ho
K{-kk-} (KSP hi ho -> (FResponse -> FResponse) -> KSP hi ho
forall a b c d e. Fa a b c d -> (e -> a) -> Fa e b c d
preMapLow' KSP hi ho
sp FResponse -> FResponse
pre)
postMapLowK :: (FRequest -> FRequest) -> K hi ho -> K hi ho
postMapLowK FRequest -> FRequest
post (K KSP hi ho
sp) = KSP hi ho -> K hi ho
forall hi ho. KSP hi ho -> K hi ho
K{-kk-} ((FRequest -> FRequest) -> KSP hi ho -> KSP hi ho
forall a b c d e. (a -> b) -> Fa c a d e -> Fa c b d e
postMapLow' FRequest -> FRequest
post KSP hi ho
sp)

postProcessHigh' :: (SP a b) -> (Fa c d e a) -> Fa c d e b
postProcessHigh' :: SP a b -> Fa c d e a -> Fa c d e b
postProcessHigh' SP a b
p Fa c d e a
f = SP (Message d a) (Message d b) -> Fa c d e a -> Fa c d e b
forall a1 b a2. SP a1 b -> SP a2 a1 -> SP a2 b
serCompSP (SP a b -> SP (Message d a) (Message d b)
forall a1 b a2. SP a1 b -> SP (Message a2 a1) (Message a2 b)
idLowSP SP a b
p) Fa c d e a
f

postProcessLow' :: (SP a b) -> (Fa c a d e) -> Fa c b d e
postProcessLow' :: SP a b -> Fa c a d e -> Fa c b d e
postProcessLow' SP a b
p Fa c a d e
f = SP (Message a e) (Message b e) -> Fa c a d e -> Fa c b d e
forall a1 b a2. SP a1 b -> SP a2 a1 -> SP a2 b
serCompSP (SP a b -> SP (Message a e) (Message b e)
forall a1 a2 b. SP a1 a2 -> SP (Message a1 b) (Message a2 b)
idHighSP SP a b
p) Fa c a d e
f

preProcessHigh' :: (Fa a b c d) -> (SP e c) -> Fa a b e d
preProcessHigh' :: Fa a b c d -> SP e c -> Fa a b e d
preProcessHigh' Fa a b c d
f SP e c
p = Fa a b c d -> SP (Message a e) (Message a c) -> Fa a b e d
forall a1 b a2. SP a1 b -> SP a2 a1 -> SP a2 b
serCompSP Fa a b c d
f (SP e c -> SP (Message a e) (Message a c)
forall a1 b a2. SP a1 b -> SP (Message a2 a1) (Message a2 b)
idLowSP SP e c
p)

preProcessLow' :: (Fa a b c d) -> (SP e a) -> Fa e b c d
preProcessLow' :: Fa a b c d -> SP e a -> Fa e b c d
preProcessLow' Fa a b c d
f SP e a
p = Fa a b c d -> SP (Message e c) (Message a c) -> Fa e b c d
forall a1 b a2. SP a1 b -> SP a2 a1 -> SP a2 b
serCompSP Fa a b c d
f (SP e a -> SP (Message e c) (Message a c)
forall a1 a2 b. SP a1 a2 -> SP (Message a1 b) (Message a2 b)
idHighSP SP e a
p)

preMapHigh' :: (Fa a b c d) -> (e -> c) -> Fa a b e d
preMapHigh' :: Fa a b c d -> (e -> c) -> Fa a b e d
preMapHigh' Fa a b c d
f e -> c
pre = Fa a b c d -> (Message a e -> Message a c) -> Fa a b e d
forall a b t. SP a b -> (t -> a) -> SP t b
preMapSP Fa a b c d
f ((e -> c) -> Message a e -> Message a c
forall t b a. (t -> b) -> Message a t -> Message a b
aHigh e -> c
pre)

preMapLow' :: (Fa a b c d) -> (e -> a) -> Fa e b c d
preMapLow' :: Fa a b c d -> (e -> a) -> Fa e b c d
preMapLow' Fa a b c d
f e -> a
pre = Fa a b c d -> (Message e c -> Message a c) -> Fa e b c d
forall a b t. SP a b -> (t -> a) -> SP t b
preMapSP Fa a b c d
f ((e -> a) -> Message e c -> Message a c
forall t a b. (t -> a) -> Message t b -> Message a b
aLow e -> a
pre)

postMapHigh' :: (a -> b) -> (Fa c d e a) -> Fa c d e b
postMapHigh' :: (a -> b) -> Fa c d e a -> Fa c d e b
postMapHigh' a -> b
post Fa c d e a
f = (Message d a -> Message d b) -> Fa c d e a -> Fa c d e b
forall t b a. (t -> b) -> SP a t -> SP a b
postMapSP ((a -> b) -> Message d a -> Message d b
forall t b a. (t -> b) -> Message a t -> Message a b
aHigh a -> b
post) Fa c d e a
f

postMapLow' :: (a -> b) -> (Fa c a d e) -> Fa c b d e
postMapLow' :: (a -> b) -> Fa c a d e -> Fa c b d e
postMapLow' a -> b
post Fa c a d e
f = (Message a e -> Message b e) -> Fa c a d e -> Fa c b d e
forall t b a. (t -> b) -> SP a t -> SP a b
postMapSP ((a -> b) -> Message a e -> Message b e
forall t a b. (t -> a) -> Message t b -> Message a b
aLow a -> b
post) Fa c a d e
f

prepostMapHigh' :: (a -> b) -> (c -> d) -> (Fa e f b c) -> Fa e f a d
prepostMapHigh' :: (a -> b) -> (c -> d) -> Fa e f b c -> Fa e f a d
prepostMapHigh' a -> b
pre c -> d
post Fa e f b c
f = (Message e a -> Message e b)
-> (Message f c -> Message f d) -> Fa e f b c -> Fa e f a d
forall t1 a t2 b. (t1 -> a) -> (t2 -> b) -> SP a t2 -> SP t1 b
prepostMapSP ((a -> b) -> Message e a -> Message e b
forall t b a. (t -> b) -> Message a t -> Message a b
aHigh a -> b
pre) ((c -> d) -> Message f c -> Message f d
forall t b a. (t -> b) -> Message a t -> Message a b
aHigh c -> d
post) Fa e f b c
f


prepostMapHigh :: (hi -> b) -> (c -> ho) -> F b c -> F hi ho
prepostMapHigh hi -> b
pre c -> ho
post (F FSP b c
sp) = FSP hi ho -> F hi ho
forall hi ho. FSP hi ho -> F hi ho
F{-ff-} ((hi -> b) -> (c -> ho) -> FSP b c -> FSP hi ho
forall a b c d e f.
(a -> b) -> (c -> d) -> Fa e f b c -> Fa e f a d
prepostMapHigh' hi -> b
pre c -> ho
post FSP b c
sp)
prepostMapHighK :: (hi -> b) -> (c -> ho) -> K b c -> K hi ho
prepostMapHighK hi -> b
pre c -> ho
post (K KSP b c
sp) = KSP hi ho -> K hi ho
forall hi ho. KSP hi ho -> K hi ho
K{-kk-} ((hi -> b) -> (c -> ho) -> KSP b c -> KSP hi ho
forall a b c d e f.
(a -> b) -> (c -> d) -> Fa e f b c -> Fa e f a d
prepostMapHigh' hi -> b
pre c -> ho
post KSP b c
sp)

prepostMapLow' :: (a -> b) -> (c -> d) -> (Fa b c e f) -> Fa a d e f
prepostMapLow' :: (a -> b) -> (c -> d) -> Fa b c e f -> Fa a d e f
prepostMapLow' a -> b
pre c -> d
post Fa b c e f
f = (Message a e -> Message b e)
-> (Message c f -> Message d f) -> Fa b c e f -> Fa a d e f
forall t1 a t2 b. (t1 -> a) -> (t2 -> b) -> SP a t2 -> SP t1 b
prepostMapSP ((a -> b) -> Message a e -> Message b e
forall t a b. (t -> a) -> Message t b -> Message a b
aLow a -> b
pre) ((c -> d) -> Message c f -> Message d f
forall t a b. (t -> a) -> Message t b -> Message a b
aLow c -> d
post) Fa b c e f
f

prepostMapLow :: (TEvent -> TEvent) -> (TCommand -> TCommand) -> F hi ho -> F hi ho
prepostMapLow TEvent -> TEvent
pre TCommand -> TCommand
post (F FSP hi ho
sp) = FSP hi ho -> F hi ho
forall hi ho. FSP hi ho -> F hi ho
F ((TEvent -> TEvent)
-> (TCommand -> TCommand) -> FSP hi ho -> FSP hi ho
forall a b c d e f.
(a -> b) -> (c -> d) -> Fa b c e f -> Fa a d e f
prepostMapLow' TEvent -> TEvent
pre TCommand -> TCommand
post FSP hi ho
sp)
prepostMapLowK :: (FResponse -> FResponse)
-> (FRequest -> FRequest) -> K hi ho -> K hi ho
prepostMapLowK FResponse -> FResponse
pre FRequest -> FRequest
post (K KSP hi ho
sp) = KSP hi ho -> K hi ho
forall hi ho. KSP hi ho -> K hi ho
K ((FResponse -> FResponse)
-> (FRequest -> FRequest) -> KSP hi ho -> KSP hi ho
forall a b c d e f.
(a -> b) -> (c -> d) -> Fa b c e f -> Fa a d e f
prepostMapLow' FResponse -> FResponse
pre FRequest -> FRequest
post KSP hi ho
sp)