MapstateMsg

module MapstateMsg(mapLow, mapHigh, mapstateLow, mapstateHigh) where
import Message(Message(..))
--import SP(SP)
import Spops
import HbcUtils(apSnd)

mapstateHigh p s =
    let ms s' (Low msg) = (s', [Low msg])
        ms s' (High msg) = apSnd (map High) (p s' msg)
    in  mapstateSP ms s

mapstateLow p s =
    let ms s' (High msg) = (s', [High msg])
        ms s' (Low msg) = apSnd (map Low) (p s' msg)
    in  mapstateSP ms s

mapHigh p =
    let ms (High msg) = map High (p msg)
        ms (Low msg) = [Low msg]
    in  concmapSP ms

mapLow p =
    let ms (Low msg) = map Low (p msg)
        ms (High msg) = [High msg]
    in  concmapSP ms