{-# LANGUAGE PatternSynonyms #-}
module TypedSession.State.Pattern where
import TypedSession.State.Type (Creat, Protocol)
import qualified TypedSession.State.Type as N
pattern Msg :: String -> [String] -> r -> r -> N.MsgOrLabel Creat r
pattern Msg a b c d = N.Msg () a b c d
pattern Label :: Int -> N.MsgOrLabel Creat r
pattern Label i = N.Label () i
pattern BranchSt :: bst -> Protocol Creat r bst -> N.BranchSt Creat r bst
pattern BranchSt a b = N.BranchSt () a b
infixr 5 :>
pattern (:>) :: N.MsgOrLabel Creat r -> Protocol Creat r bst -> Protocol Creat r bst
pattern (:>) a b = a N.:> b
pattern Branch :: r -> [N.BranchSt Creat r bst] -> Protocol Creat r bst
pattern Branch a b = N.Branch () a b
pattern Goto :: Int -> Protocol Creat r bst
pattern Goto i = N.Goto () i
pattern Terminal :: Protocol Creat r bst
pattern Terminal = N.Terminal ()