Safe Haskell | None |
---|---|
Language | GHC2024 |
Aggregate.SeatArrangement
Synopsis
- data SeatArrangementLifecycle
- data SeatArrangement (sc :: Nat) (lc :: SeatArrangementLifecycle) where
- SeatArrangementInitialising :: forall (sc :: Nat). SeatArrangement sc 'Initialising
- SeatArrangementRegistering :: forall (sc :: Nat). Reservations sc -> SeatArrangement sc 'Registering
- SeatArrangementProposing :: forall (sc :: Nat). Reservations sc -> SeatArrangement sc 'Proposing
- SeatArrangementConfirming :: forall (sc :: Nat). Proposals sc -> ConfirmableAssignments sc -> SeatArrangement sc 'Confirming
- SeatArrangementBoarding :: forall (sc :: Nat). Assignments sc -> SeatArrangement sc 'Boarding
- data SomeSeatArrangement (lc :: SeatArrangementLifecycle) where
- SomeSeatArrangement :: forall (sc :: Nat) (lc :: SeatArrangementLifecycle). KnownNat sc => SeatArrangement sc lc -> SomeSeatArrangement lc
- initialise :: NumberOfSeats -> SomeSeatArrangement 'Initialising
- type RegisterProblem = ReservationsProblem
- class CanRegister (sc :: Nat) (lc :: SeatArrangementLifecycle) where
- register :: Reservation -> SeatArrangement sc lc -> Either RegisterProblem (SeatArrangement sc 'Registering)
- data UnregisterResult (sc :: Nat)
- class CanUnregister (sc :: Nat) (lc :: SeatArrangementLifecycle) where
- unregister :: ReservationId -> SeatArrangement sc lc -> UnregisterResult sc
- propose :: forall (sc :: Nat). KnownNat sc => SeatArrangement sc 'Registering -> SeatArrangement sc 'Proposing
- data ProposalProblem = ProposalDoesNotCoverAllReservations
- parseProposals :: forall (sc :: Nat). KnownNat sc => Proposals sc -> SeatArrangement sc 'Proposing -> Either ProposalProblem (SeatArrangement sc 'Confirming)
- data ProposalsForReservationProblem
- proposalsForReservation :: forall (ps :: Nat) (sc :: Nat). KnownNat ps => ReservationId -> SeatArrangement sc 'Confirming -> Either ProposalsForReservationProblem (Proposals ps)
- data ConfirmProblem
- confirm :: forall (ps :: Nat) (sc :: Nat). (KnownNat ps, KnownNat sc) => ReservationId -> Proposal ps -> SeatArrangement sc 'Confirming -> Either ConfirmProblem (SeatArrangement sc 'Confirming)
- data BoardProblem = BoardNotAllowedWithUnassignedSeats
- board :: forall (sc :: Nat). KnownNat sc => SeatArrangement sc 'Confirming -> Either BoardProblem (SeatArrangement sc 'Boarding)
Documentation
data SeatArrangementLifecycle #
Constructors
Initialising | Initialise empty seat arrangement, typically when a flight is scheduled, accepts registering reservations |
Registering | Register/unregister reservations |
Proposing | Retrieving proposals |
Confirming | Assignment proposals available, accepting confirmations |
Boarding | All passengers are assigned a seat, prepare boarding |
data SeatArrangement (sc :: Nat) (lc :: SeatArrangementLifecycle) where #
Constructors
SeatArrangementInitialising :: forall (sc :: Nat). SeatArrangement sc 'Initialising | |
SeatArrangementRegistering :: forall (sc :: Nat). Reservations sc -> SeatArrangement sc 'Registering | |
SeatArrangementProposing :: forall (sc :: Nat). Reservations sc -> SeatArrangement sc 'Proposing | |
SeatArrangementConfirming :: forall (sc :: Nat). Proposals sc -> ConfirmableAssignments sc -> SeatArrangement sc 'Confirming | |
SeatArrangementBoarding :: forall (sc :: Nat). Assignments sc -> SeatArrangement sc 'Boarding |
data SomeSeatArrangement (lc :: SeatArrangementLifecycle) where #
Constructors
SomeSeatArrangement :: forall (sc :: Nat) (lc :: SeatArrangementLifecycle). KnownNat sc => SeatArrangement sc lc -> SomeSeatArrangement lc |
Operations related to Initialising
phase
initialise :: NumberOfSeats -> SomeSeatArrangement 'Initialising #
Creates an empty SeatArrangement
, based on the NumberOfSeats
type RegisterProblem = ReservationsProblem #
class CanRegister (sc :: Nat) (lc :: SeatArrangementLifecycle) where #
Register reservation to seat arrangement, applicable in Initialising
and Registering
phase
Methods
register :: Reservation -> SeatArrangement sc lc -> Either RegisterProblem (SeatArrangement sc 'Registering) #
Instances
KnownNat sc => CanRegister sc 'Initialising # | |
Defined in Aggregate.SeatArrangement Methods register :: Reservation -> SeatArrangement sc 'Initialising -> Either RegisterProblem (SeatArrangement sc 'Registering) # | |
KnownNat sc => CanRegister sc 'Registering # | |
Defined in Aggregate.SeatArrangement Methods register :: Reservation -> SeatArrangement sc 'Registering -> Either RegisterProblem (SeatArrangement sc 'Registering) # |
Operations related to Registering
phase
data UnregisterResult (sc :: Nat) #
Constructors
InitialisingAfterUnregister (SeatArrangement sc 'Initialising) | |
RegsteringAfterUnregister (SeatArrangement sc 'Registering) |
class CanUnregister (sc :: Nat) (lc :: SeatArrangementLifecycle) where #
Unregisters reservation from seat arrangement, applicable in Registering
phase
note that it can transitition to Initialising
phase, when no reservations are present after unregister
Methods
unregister :: ReservationId -> SeatArrangement sc lc -> UnregisterResult sc #
Instances
KnownNat sc => CanUnregister sc 'Registering # | |
Defined in Aggregate.SeatArrangement Methods unregister :: ReservationId -> SeatArrangement sc 'Registering -> UnregisterResult sc # |
propose :: forall (sc :: Nat). KnownNat sc => SeatArrangement sc 'Registering -> SeatArrangement sc 'Proposing #
Ends Registering
phase, retrieving proposals
Operations related to Proposing
phase
data ProposalProblem #
Constructors
ProposalDoesNotCoverAllReservations |
Instances
Eq ProposalProblem # | |
Defined in Aggregate.SeatArrangement Methods (==) :: ProposalProblem -> ProposalProblem -> Bool # (/=) :: ProposalProblem -> ProposalProblem -> Bool # | |
Ord ProposalProblem # | |
Defined in Aggregate.SeatArrangement Methods compare :: ProposalProblem -> ProposalProblem -> Ordering # (<) :: ProposalProblem -> ProposalProblem -> Bool # (<=) :: ProposalProblem -> ProposalProblem -> Bool # (>) :: ProposalProblem -> ProposalProblem -> Bool # (>=) :: ProposalProblem -> ProposalProblem -> Bool # max :: ProposalProblem -> ProposalProblem -> ProposalProblem # min :: ProposalProblem -> ProposalProblem -> ProposalProblem # |
parseProposals :: forall (sc :: Nat). KnownNat sc => Proposals sc -> SeatArrangement sc 'Proposing -> Either ProposalProblem (SeatArrangement sc 'Confirming) #
Parses proposals to SeatArrangement
, on success the lifecycle transitions to Confirming
Operations related to Confirming
phase
data ProposalsForReservationProblem #
Instances
proposalsForReservation :: forall (ps :: Nat) (sc :: Nat). KnownNat ps => ReservationId -> SeatArrangement sc 'Confirming -> Either ProposalsForReservationProblem (Proposals ps) #
Get available propoals for a specific reservation
data ConfirmProblem #
confirm :: forall (ps :: Nat) (sc :: Nat). (KnownNat ps, KnownNat sc) => ReservationId -> Proposal ps -> SeatArrangement sc 'Confirming -> Either ConfirmProblem (SeatArrangement sc 'Confirming) #
Confirm seat assignments of a specific reservation
Operations related to Boarding
phase
data BoardProblem #
Constructors
BoardNotAllowedWithUnassignedSeats |
Instances
Eq BoardProblem # | |
Defined in Aggregate.SeatArrangement | |
Ord BoardProblem # | |
Defined in Aggregate.SeatArrangement Methods compare :: BoardProblem -> BoardProblem -> Ordering # (<) :: BoardProblem -> BoardProblem -> Bool # (<=) :: BoardProblem -> BoardProblem -> Bool # (>) :: BoardProblem -> BoardProblem -> Bool # (>=) :: BoardProblem -> BoardProblem -> Bool # max :: BoardProblem -> BoardProblem -> BoardProblem # min :: BoardProblem -> BoardProblem -> BoardProblem # |
board :: forall (sc :: Nat). KnownNat sc => SeatArrangement sc 'Confirming -> Either BoardProblem (SeatArrangement sc 'Boarding) #
Prepare boarding
Precondition: all passengers needs to be assigned to a seat