module UserLayoutF where
import Fudget
import FRequest
import Geometry(Rect)
import Spops(concatMapSP)
import CompSP(preMapSP,serCompSP)
import LayoutRequest
userLayoutF :: F a b -> F (Either (Path,Rect) a) (Either (Path,LayoutMessage) b)
userLayoutF :: F a b -> F (Either (Path, Rect) a) (Either (Path, LayoutMessage) b)
userLayoutF (F FSP a b
fud) = FSP (Either (Path, Rect) a) (Either (Path, LayoutMessage) b)
-> F (Either (Path, Rect) a) (Either (Path, LayoutMessage) b)
forall hi ho. FSP hi ho -> F hi ho
F ((Message (Path, FRequest) b
-> [Message (Path, FRequest) (Either (Path, LayoutMessage) b)])
-> SP
(Message (Path, FRequest) b)
(Message (Path, FRequest) (Either (Path, LayoutMessage) b))
forall t b. (t -> [b]) -> SP t b
concatMapSP Message (Path, FRequest) b
-> [Message (Path, FRequest) (Either (Path, LayoutMessage) b)]
forall a b.
Message (a, FRequest) b
-> [Message (a, FRequest) (Either (a, LayoutMessage) b)]
post SP
(Message (Path, FRequest) b)
(Message (Path, FRequest) (Either (Path, LayoutMessage) b))
-> FSP a b
-> SP
(FEvent a)
(Message (Path, FRequest) (Either (Path, LayoutMessage) b))
forall a1 b a2. SP a1 b -> SP a2 a1 -> SP a2 b
`serCompSP` FSP a b
fud SP
(FEvent a)
(Message (Path, FRequest) (Either (Path, LayoutMessage) b))
-> (Message (Path, FResponse) (Either (Path, Rect) a) -> FEvent a)
-> FSP (Either (Path, Rect) a) (Either (Path, LayoutMessage) b)
forall a b t. SP a b -> (t -> a) -> SP t b
`preMapSP` Message (Path, FResponse) (Either (Path, Rect) a) -> FEvent a
forall a b.
Message (a, FResponse) (Either (a, Rect) b)
-> Message (a, FResponse) b
pre)
where
pre :: Message (a, FResponse) (Either (a, Rect) b)
-> Message (a, FResponse) b
pre Message (a, FResponse) (Either (a, Rect) b)
msg =
case Message (a, FResponse) (Either (a, Rect) b)
msg of
High (Right b
x) -> b -> Message (a, FResponse) b
forall a b. b -> Message a b
High b
x
High (Left (a
p,Rect
place)) -> (a, FResponse) -> Message (a, FResponse) b
forall a b. a -> Message a b
Low (a
p,LayoutResponse -> FResponse
LEvt (Rect -> LayoutResponse
LayoutPlace Rect
place))
Low (a, FResponse)
pev -> (a, FResponse) -> Message (a, FResponse) b
forall a b. a -> Message a b
Low (a, FResponse)
pev
post :: Message (a, FRequest) b
-> [Message (a, FRequest) (Either (a, LayoutMessage) b)]
post Message (a, FRequest) b
msg =
case Message (a, FRequest) b
msg of
High b
x -> [Either (a, LayoutMessage) b
-> Message (a, FRequest) (Either (a, LayoutMessage) b)
forall a b. b -> Message a b
High (b -> Either (a, LayoutMessage) b
forall a b. b -> Either a b
Right b
x)]
Low (a
p,LCmd LayoutMessage
req) -> [Either (a, LayoutMessage) b
-> Message (a, FRequest) (Either (a, LayoutMessage) b)
forall a b. b -> Message a b
High ((a, LayoutMessage) -> Either (a, LayoutMessage) b
forall a b. a -> Either a b
Left (a
p,LayoutMessage
req))]
Low (a, FRequest)
pcmd -> [(a, FRequest)
-> Message (a, FRequest) (Either (a, LayoutMessage) b)
forall a b. a -> Message a b
Low (a, FRequest)
pcmd]