packages feed

diplomacy 0.1.0.0 → 0.2.0.0

raw patch · 6 files changed

+68/−39 lines, 6 filesdep ~TypeNatdep ~basedep ~transformersPVP ok

version bump matches the API change (PVP)

Dependency ranges changed: TypeNat, base, transformers

API changes (from Hackage documentation)

- Data.AtLeast: instance Eq t => Eq (AtLeast n t)
- Data.AtLeast: instance Show t => Show (AtLeast n t)
- Data.AtLeast: instance Typeable Weaken
- Diplomacy.Aligned: instance Eq t => Eq (Aligned t)
- Diplomacy.Aligned: instance Functor Aligned
- Diplomacy.Aligned: instance Ord t => Ord (Aligned t)
- Diplomacy.Aligned: instance Show t => Show (Aligned t)
- Diplomacy.Game: AdjustGame :: AdjustRound round -> Status roundStatus -> Turn -> Map Zone (Aligned Unit, RoundOrderConstructor roundStatus Adjust) -> Control -> Game round roundStatus
- Diplomacy.Game: AdjustRound :: AdjustRound RoundFive
- Diplomacy.Game: Resolved :: Status RoundResolved
- Diplomacy.Game: RetreatGame :: RetreatRound round -> Status roundStatus -> Turn -> Resolution Typical -> Map Zone (Aligned Unit, RoundOrderConstructor roundStatus Retreat) -> Occupation -> Control -> Game round roundStatus
- Diplomacy.Game: RetreatRoundOne :: RetreatRound RoundTwo
- Diplomacy.Game: RetreatRoundTwo :: RetreatRound RoundFour
- Diplomacy.Game: RoundFive :: Round
- Diplomacy.Game: RoundFour :: Round
- Diplomacy.Game: RoundOne :: Round
- Diplomacy.Game: RoundResolved :: RoundStatus
- Diplomacy.Game: RoundThree :: Round
- Diplomacy.Game: RoundTwo :: Round
- Diplomacy.Game: RoundUnresolved :: RoundStatus
- Diplomacy.Game: TypicalGame :: TypicalRound round -> Status roundStatus -> Turn -> Map Zone (Aligned Unit, RoundOrderConstructor roundStatus Typical) -> Control -> Game round roundStatus
- Diplomacy.Game: TypicalRoundOne :: TypicalRound RoundOne
- Diplomacy.Game: TypicalRoundTwo :: TypicalRound RoundThree
- Diplomacy.Game: Unresolved :: Status RoundUnresolved
- Diplomacy.Game: instance Bounded Round
- Diplomacy.Game: instance Enum Round
- Diplomacy.Game: instance Eq Round
- Diplomacy.Game: instance Ord Round
- Diplomacy.Game: instance Show (AdjustRound round)
- Diplomacy.Game: instance Show (RetreatRound round)
- Diplomacy.Game: instance Show (TypicalRound round)
- Diplomacy.Game: instance Show Round
- Diplomacy.Game: instance Show RoundStatus
- Diplomacy.Game: instance Typeable 'RoundFive
- Diplomacy.Game: instance Typeable 'RoundFour
- Diplomacy.Game: instance Typeable 'RoundOne
- Diplomacy.Game: instance Typeable 'RoundResolved
- Diplomacy.Game: instance Typeable 'RoundThree
- Diplomacy.Game: instance Typeable 'RoundTwo
- Diplomacy.Game: instance Typeable 'RoundUnresolved
- Diplomacy.Game: instance Typeable Game
- Diplomacy.Game: instance Typeable Status
- Diplomacy.GreatPower: Austria :: GreatPower
- Diplomacy.GreatPower: England :: GreatPower
- Diplomacy.GreatPower: France :: GreatPower
- Diplomacy.GreatPower: Germany :: GreatPower
- Diplomacy.GreatPower: Italy :: GreatPower
- Diplomacy.GreatPower: Russia :: GreatPower
- Diplomacy.GreatPower: Turkey :: GreatPower
- Diplomacy.GreatPower: instance Bounded GreatPower
- Diplomacy.GreatPower: instance Enum GreatPower
- Diplomacy.GreatPower: instance Eq GreatPower
- Diplomacy.GreatPower: instance Ord GreatPower
- Diplomacy.GreatPower: instance Read GreatPower
- Diplomacy.GreatPower: instance Show GreatPower
- Diplomacy.Order: SomeOrder :: Order phase order -> SomeOrder phase
- Diplomacy.Order: instance Eq (Order phase order)
- Diplomacy.Order: instance Eq (SomeOrder phase)
- Diplomacy.Order: instance Ord (Order phase order)
- Diplomacy.Order: instance Ord (SomeOrder phase)
- Diplomacy.Order: instance Show (Order phase order)
- Diplomacy.Order: instance Show (SomeOrder phase)
- Diplomacy.Order: outOrder :: Order -> (Subject, OrderObject phase order)
- Diplomacy.OrderObject: BuildObject :: OrderObject Adjust Build
- Diplomacy.OrderObject: ContinueObject :: OrderObject Adjust Continue
- Diplomacy.OrderObject: ConvoyObject :: Subject -> ProvinceTarget -> OrderObject Typical Convoy
- Diplomacy.OrderObject: DisbandObject :: OrderObject Adjust Disband
- Diplomacy.OrderObject: MoveObject :: ProvinceTarget -> OrderObject Typical Move
- Diplomacy.OrderObject: SomeOrderObject :: OrderObject phase order -> SomeOrderObject phase
- Diplomacy.OrderObject: SupportObject :: Subject -> ProvinceTarget -> OrderObject Typical Support
- Diplomacy.OrderObject: SurrenderObject :: OrderObject Retreat Surrender
- Diplomacy.OrderObject: WithdrawObject :: ProvinceTarget -> OrderObject Retreat Withdraw
- Diplomacy.OrderObject: instance Eq (OrderObject phase order)
- Diplomacy.OrderObject: instance Ord (OrderObject phase order)
- Diplomacy.OrderObject: instance Show (OrderObject phase order)
- Diplomacy.OrderObject: instance Show (SomeOrderObject phase)
- Diplomacy.OrderResolution: ConvoyNoRoute :: FailureReason Typical Convoy
- Diplomacy.OrderResolution: ConvoyRouteCut :: [(Zone, Aligned Subject)] -> FailureReason Typical Convoy
- Diplomacy.OrderResolution: ConvoyVoid :: FailureReason Typical Convoy
- Diplomacy.OrderResolution: MoveBounced :: AtLeast One (Aligned Subject) -> FailureReason Typical Move
- Diplomacy.OrderResolution: MoveConvoyParadox :: FailureReason Typical Move
- Diplomacy.OrderResolution: MoveFriendlyDislodge :: Unit -> FailureReason Typical Move
- Diplomacy.OrderResolution: MoveNoConvoy :: FailureReason Typical Move
- Diplomacy.OrderResolution: MoveOverpowered :: AtLeast One (Aligned Subject) -> FailureReason Typical Move
- Diplomacy.OrderResolution: SomeResolved :: Resolved k phase order -> SomeResolved k phase
- Diplomacy.OrderResolution: SupportCut :: AtLeast One (Aligned Subject) -> FailureReason Typical Support
- Diplomacy.OrderResolution: SupportDislodged :: Aligned Subject -> FailureReason Typical Support
- Diplomacy.OrderResolution: SupportVoid :: FailureReason Typical Support
- Diplomacy.OrderResolution: WithdrawCollision :: AtLeast One (Aligned Subject) -> FailureReason Retreat Withdraw
- Diplomacy.OrderResolution: convoyRoutesNonParadox :: ConvoyRoutes -> [ConvoyRoute]
- Diplomacy.OrderResolution: convoyRoutesParadox :: ConvoyRoutes -> [ConvoyRoute]
- Diplomacy.OrderResolution: instance Eq (FailureReason phase order)
- Diplomacy.OrderResolution: instance Eq (SomeResolved OrderObject phase)
- Diplomacy.OrderResolution: instance Show (FailureReason phase order)
- Diplomacy.OrderResolution: instance Show (SomeResolved Order phase)
- Diplomacy.OrderResolution: instance Show (SomeResolved OrderObject phase)
- Diplomacy.OrderResolution: instance Show ConvoyRoutes
- Diplomacy.OrderResolution: instance Show Incumbant
- Diplomacy.OrderResolution: instance Show MoveClassification
- Diplomacy.OrderResolution: instance Show RequiresConvoy
- Diplomacy.OrderResolution: instance Show WouldSucceed
- Diplomacy.OrderResolution: instance Typeable 'DoesNotRequireConvoy
- Diplomacy.OrderResolution: instance Typeable 'RequiresConvoy
- Diplomacy.OrderResolution: instance Typeable 'WouldNotSucceed
- Diplomacy.OrderResolution: instance Typeable 'WouldSucceed
- Diplomacy.OrderType: Build :: OrderType
- Diplomacy.OrderType: Continue :: OrderType
- Diplomacy.OrderType: Convoy :: OrderType
- Diplomacy.OrderType: Disband :: OrderType
- Diplomacy.OrderType: Move :: OrderType
- Diplomacy.OrderType: Support :: OrderType
- Diplomacy.OrderType: Surrender :: OrderType
- Diplomacy.OrderType: Withdraw :: OrderType
- Diplomacy.OrderType: instance Typeable OrderType
- Diplomacy.OrderValidation: ALCons :: g (f t) -> ArgumentList g f ts -> ArgumentList g f (t : ts)
- Diplomacy.OrderValidation: ALNil :: ArgumentList g f []
- Diplomacy.OrderValidation: AdmissibleNumberOfBuilds :: AdjustSetValidityCriterion
- Diplomacy.OrderValidation: BuildValidSubject :: ValidityCriterion Adjust Build
- Diplomacy.OrderValidation: ContinueValidSubject :: ValidityCriterion Adjust Continue
- Diplomacy.OrderValidation: ConvoyValidConvoySubject :: ValidityCriterion Typical Convoy
- Diplomacy.OrderValidation: ConvoyValidConvoyTarget :: ValidityCriterion Typical Convoy
- Diplomacy.OrderValidation: ConvoyValidSubject :: ValidityCriterion Typical Convoy
- Diplomacy.OrderValidation: DisbandValidSubject :: ValidityCriterion Adjust Disband
- Diplomacy.OrderValidation: MoveReachable :: ValidityCriterion Typical Move
- Diplomacy.OrderValidation: MoveUnitCanOccupy :: ValidityCriterion Typical Move
- Diplomacy.OrderValidation: MoveValidSubject :: ValidityCriterion Typical Move
- Diplomacy.OrderValidation: OnlyContinues :: AdjustSetValidityCriterion
- Diplomacy.OrderValidation: RequiredNumberOfDisbands :: AdjustSetValidityCriterion
- Diplomacy.OrderValidation: SomeValidityCriterion :: ValidityCriterion phase order -> SomeValidityCriterion phase
- Diplomacy.OrderValidation: SupportValidSubject :: ValidityCriterion Typical Support
- Diplomacy.OrderValidation: SupportedCanDoMove :: ValidityCriterion Typical Support
- Diplomacy.OrderValidation: SupporterAdjacent :: ValidityCriterion Typical Support
- Diplomacy.OrderValidation: SupporterCanOccupy :: ValidityCriterion Typical Support
- Diplomacy.OrderValidation: SurrenderValidSubject :: ValidityCriterion Retreat Surrender
- Diplomacy.OrderValidation: VCCons :: (ArgumentList Identity Identity ts -> TaggedIntersectionOfUnions g f t) -> ValidityCharacterization g f ts -> ValidityCharacterization g f (t : ts)
- Diplomacy.OrderValidation: VCNil :: ValidityCharacterization g f []
- Diplomacy.OrderValidation: WithdrawAdjacent :: ValidityCriterion Retreat Withdraw
- Diplomacy.OrderValidation: WithdrawNotDislodgingZone :: ValidityCriterion Retreat Withdraw
- Diplomacy.OrderValidation: WithdrawUncontestedZone :: ValidityCriterion Retreat Withdraw
- Diplomacy.OrderValidation: WithdrawUnoccupiedZone :: ValidityCriterion Retreat Withdraw
- Diplomacy.OrderValidation: WithdrawValidSubject :: ValidityCriterion Retreat Withdraw
- Diplomacy.OrderValidation: buildSubjects :: AdjustSubjects -> Set Subject
- Diplomacy.OrderValidation: continueSubjects :: AdjustSubjects -> Set Subject
- Diplomacy.OrderValidation: disbandSubjects :: AdjustSubjects -> Set Subject
- Diplomacy.OrderValidation: instance (Every Eq ts) => Eq (ArgumentList Identity Identity ts)
- Diplomacy.OrderValidation: instance (Every Ord ts, Every Eq ts) => Ord (ArgumentList Identity Identity ts)
- Diplomacy.OrderValidation: instance (Every Show ts) => Show (ArgumentList Identity Identity ts)
- Diplomacy.OrderValidation: instance Eq (SomeValidityCriterion phase)
- Diplomacy.OrderValidation: instance Eq (ValidityCriterion phase order)
- Diplomacy.OrderValidation: instance Eq AdjustSetValidityCriterion
- Diplomacy.OrderValidation: instance Eq AdjustSubjects
- Diplomacy.OrderValidation: instance Ord (SomeValidityCriterion phase)
- Diplomacy.OrderValidation: instance Ord (ValidityCriterion phase order)
- Diplomacy.OrderValidation: instance Ord AdjustSetValidityCriterion
- Diplomacy.OrderValidation: instance Ord AdjustSubjects
- Diplomacy.OrderValidation: instance Show (SomeValidityCriterion phase)
- Diplomacy.OrderValidation: instance Show (ValidityCriterion phase order)
- Diplomacy.OrderValidation: instance Show AdjustSetValidityCriterion
- Diplomacy.OrderValidation: instance Show AdjustSubjects
- Diplomacy.OrderValidation: instance SuitableFunctor Set
- Diplomacy.OrderValidation: instance SuitableFunctor []
- Diplomacy.OrderValidation: instance Typeable 'AdmissibleNumberOfBuilds
- Diplomacy.OrderValidation: instance Typeable 'Intersection
- Diplomacy.OrderValidation: instance Typeable 'OnlyContinues
- Diplomacy.OrderValidation: instance Typeable 'RequiredNumberOfDisbands
- Diplomacy.OrderValidation: instance Typeable 'Union
- Diplomacy.OrderValidation: instance Typeable ArgumentList
- Diplomacy.OrderValidation: instance Typeable Intersection
- Diplomacy.OrderValidation: instance Typeable SomeValidityCriterion
- Diplomacy.OrderValidation: instance Typeable SuitableFunctor
- Diplomacy.OrderValidation: instance Typeable Union
- Diplomacy.OrderValidation: instance Typeable ValidityCharacterization
- Diplomacy.Phase: Adjust :: Phase
- Diplomacy.Phase: Retreat :: Phase
- Diplomacy.Phase: Typical :: Phase
- Diplomacy.Phase: instance Bounded Phase
- Diplomacy.Phase: instance Enum Phase
- Diplomacy.Phase: instance Eq Phase
- Diplomacy.Phase: instance Ord Phase
- Diplomacy.Phase: instance Show Phase
- Diplomacy.Province: instance Bounded Province
- Diplomacy.Province: instance Bounded ProvinceCoast
- Diplomacy.Province: instance Bounded ProvinceTarget
- Diplomacy.Province: instance Bounded ProvinceType
- Diplomacy.Province: instance Enum Province
- Diplomacy.Province: instance Enum ProvinceCoast
- Diplomacy.Province: instance Enum ProvinceTarget
- Diplomacy.Province: instance Enum ProvinceType
- Diplomacy.Province: instance Eq Province
- Diplomacy.Province: instance Eq ProvinceCoast
- Diplomacy.Province: instance Eq ProvinceTarget
- Diplomacy.Province: instance Eq ProvinceType
- Diplomacy.Province: instance Ord Province
- Diplomacy.Province: instance Ord ProvinceCoast
- Diplomacy.Province: instance Ord ProvinceTarget
- Diplomacy.Province: instance Ord ProvinceType
- Diplomacy.Province: instance Show Province
- Diplomacy.Province: instance Show ProvinceCoast
- Diplomacy.Province: instance Show ProvinceTarget
- Diplomacy.Province: instance Show ProvinceType
- Diplomacy.Province: instance Typeable 'AdriaticSea
- Diplomacy.Province: instance Typeable 'AegeanSea
- Diplomacy.Province: instance Typeable 'Albania
- Diplomacy.Province: instance Typeable 'Ankara
- Diplomacy.Province: instance Typeable 'Apulia
- Diplomacy.Province: instance Typeable 'Armenia
- Diplomacy.Province: instance Typeable 'BalticSea
- Diplomacy.Province: instance Typeable 'BarentsSea
- Diplomacy.Province: instance Typeable 'Belgium
- Diplomacy.Province: instance Typeable 'Berlin
- Diplomacy.Province: instance Typeable 'BlackSea
- Diplomacy.Province: instance Typeable 'Bohemia
- Diplomacy.Province: instance Typeable 'Brest
- Diplomacy.Province: instance Typeable 'Budapest
- Diplomacy.Province: instance Typeable 'Bulgaria
- Diplomacy.Province: instance Typeable 'BulgariaEast
- Diplomacy.Province: instance Typeable 'BulgariaSouth
- Diplomacy.Province: instance Typeable 'Burgundy
- Diplomacy.Province: instance Typeable 'Clyde
- Diplomacy.Province: instance Typeable 'Coastal
- Diplomacy.Province: instance Typeable 'Constantinople
- Diplomacy.Province: instance Typeable 'Denmark
- Diplomacy.Province: instance Typeable 'EasternMediterranean
- Diplomacy.Province: instance Typeable 'Edinburgh
- Diplomacy.Province: instance Typeable 'EnglishChannel
- Diplomacy.Province: instance Typeable 'Finland
- Diplomacy.Province: instance Typeable 'Galicia
- Diplomacy.Province: instance Typeable 'Gascony
- Diplomacy.Province: instance Typeable 'Greece
- Diplomacy.Province: instance Typeable 'GulfOfBothnia
- Diplomacy.Province: instance Typeable 'GulfOfLyon
- Diplomacy.Province: instance Typeable 'HeligolandBight
- Diplomacy.Province: instance Typeable 'Holland
- Diplomacy.Province: instance Typeable 'Inland
- Diplomacy.Province: instance Typeable 'IonianSea
- Diplomacy.Province: instance Typeable 'IrishSea
- Diplomacy.Province: instance Typeable 'Kiel
- Diplomacy.Province: instance Typeable 'Liverpool
- Diplomacy.Province: instance Typeable 'Livonia
- Diplomacy.Province: instance Typeable 'London
- Diplomacy.Province: instance Typeable 'Marseilles
- Diplomacy.Province: instance Typeable 'MidAtlanticOcean
- Diplomacy.Province: instance Typeable 'Moscow
- Diplomacy.Province: instance Typeable 'Munich
- Diplomacy.Province: instance Typeable 'Naples
- Diplomacy.Province: instance Typeable 'Normal
- Diplomacy.Province: instance Typeable 'NorthAfrica
- Diplomacy.Province: instance Typeable 'NorthAtlanticOcean
- Diplomacy.Province: instance Typeable 'NorthSea
- Diplomacy.Province: instance Typeable 'Norway
- Diplomacy.Province: instance Typeable 'NorwegianSea
- Diplomacy.Province: instance Typeable 'Paris
- Diplomacy.Province: instance Typeable 'Picardy
- Diplomacy.Province: instance Typeable 'Piedmont
- Diplomacy.Province: instance Typeable 'Portugal
- Diplomacy.Province: instance Typeable 'Prussia
- Diplomacy.Province: instance Typeable 'Rome
- Diplomacy.Province: instance Typeable 'Ruhr
- Diplomacy.Province: instance Typeable 'Rumania
- Diplomacy.Province: instance Typeable 'Serbia
- Diplomacy.Province: instance Typeable 'Sevastopol
- Diplomacy.Province: instance Typeable 'Silesia
- Diplomacy.Province: instance Typeable 'Skagerrak
- Diplomacy.Province: instance Typeable 'Smyrna
- Diplomacy.Province: instance Typeable 'Spain
- Diplomacy.Province: instance Typeable 'SpainNorth
- Diplomacy.Province: instance Typeable 'SpainSouth
- Diplomacy.Province: instance Typeable 'Special
- Diplomacy.Province: instance Typeable 'StPetersburg
- Diplomacy.Province: instance Typeable 'StPetersburgNorth
- Diplomacy.Province: instance Typeable 'StPetersburgSouth
- Diplomacy.Province: instance Typeable 'Sweden
- Diplomacy.Province: instance Typeable 'Syria
- Diplomacy.Province: instance Typeable 'Trieste
- Diplomacy.Province: instance Typeable 'Tunis
- Diplomacy.Province: instance Typeable 'Tuscany
- Diplomacy.Province: instance Typeable 'Tyrolia
- Diplomacy.Province: instance Typeable 'TyrrhenianSea
- Diplomacy.Province: instance Typeable 'Ukraine
- Diplomacy.Province: instance Typeable 'Venice
- Diplomacy.Province: instance Typeable 'Vienna
- Diplomacy.Province: instance Typeable 'Wales
- Diplomacy.Province: instance Typeable 'Warsaw
- Diplomacy.Province: instance Typeable 'Water
- Diplomacy.Province: instance Typeable 'WesternMediterranean
- Diplomacy.Province: instance Typeable 'Yorkshire
- Diplomacy.Season: instance Eq Season
- Diplomacy.Season: instance Show Season
- Diplomacy.Turn: instance Eq Turn
- Diplomacy.Turn: instance Ord Turn
- Diplomacy.Turn: instance Show Turn
- Diplomacy.Unit: Army :: Unit
- Diplomacy.Unit: Fleet :: Unit
- Diplomacy.Unit: instance Bounded Unit
- Diplomacy.Unit: instance Enum Unit
- Diplomacy.Unit: instance Eq Unit
- Diplomacy.Unit: instance Ord Unit
- Diplomacy.Unit: instance Show Unit
- Diplomacy.Zone: instance Eq Zone
- Diplomacy.Zone: instance Ord Zone
- Diplomacy.Zone: instance Show Zone
- Diplomacy.ZonedSubject: instance Eq ZonedSubjectDull
- Diplomacy.ZonedSubject: instance Eq ZonedSubjectSharp
- Diplomacy.ZonedSubject: instance Ord ZonedSubjectDull
- Diplomacy.ZonedSubject: instance Ord ZonedSubjectSharp
- Diplomacy.ZonedSubject: instance Show ZonedSubjectDull
- Diplomacy.ZonedSubject: instance Show ZonedSubjectSharp
+ Data.AtLeast: instance GHC.Classes.Eq t => GHC.Classes.Eq (Data.AtLeast.AtLeast n t)
+ Data.AtLeast: instance GHC.Show.Show t => GHC.Show.Show (Data.AtLeast.AtLeast n t)
+ Diplomacy.Aligned: instance GHC.Base.Functor Diplomacy.Aligned.Aligned
+ Diplomacy.Aligned: instance GHC.Classes.Eq t => GHC.Classes.Eq (Diplomacy.Aligned.Aligned t)
+ Diplomacy.Aligned: instance GHC.Classes.Ord t => GHC.Classes.Ord (Diplomacy.Aligned.Aligned t)
+ Diplomacy.Aligned: instance GHC.Show.Show t => GHC.Show.Show (Diplomacy.Aligned.Aligned t)
+ Diplomacy.Game: [AdjustGame] :: AdjustRound round -> Status roundStatus -> Turn -> Map Zone (Aligned Unit, RoundOrderConstructor roundStatus Adjust) -> Control -> Game round roundStatus
+ Diplomacy.Game: [AdjustRound] :: AdjustRound RoundFive
+ Diplomacy.Game: [Resolved] :: Status RoundResolved
+ Diplomacy.Game: [RetreatGame] :: RetreatRound round -> Status roundStatus -> Turn -> Resolution Typical -> Map Zone (Aligned Unit, RoundOrderConstructor roundStatus Retreat) -> Occupation -> Control -> Game round roundStatus
+ Diplomacy.Game: [RetreatRoundOne] :: RetreatRound RoundTwo
+ Diplomacy.Game: [RetreatRoundTwo] :: RetreatRound RoundFour
+ Diplomacy.Game: [RoundFive] :: Round
+ Diplomacy.Game: [RoundFour] :: Round
+ Diplomacy.Game: [RoundOne] :: Round
+ Diplomacy.Game: [RoundResolved] :: RoundStatus
+ Diplomacy.Game: [RoundThree] :: Round
+ Diplomacy.Game: [RoundTwo] :: Round
+ Diplomacy.Game: [RoundUnresolved] :: RoundStatus
+ Diplomacy.Game: [TypicalGame] :: TypicalRound round -> Status roundStatus -> Turn -> Map Zone (Aligned Unit, RoundOrderConstructor roundStatus Typical) -> Control -> Game round roundStatus
+ Diplomacy.Game: [TypicalRoundOne] :: TypicalRound RoundOne
+ Diplomacy.Game: [TypicalRoundTwo] :: TypicalRound RoundThree
+ Diplomacy.Game: [Unresolved] :: Status RoundUnresolved
+ Diplomacy.Game: instance GHC.Classes.Eq Diplomacy.Game.Round
+ Diplomacy.Game: instance GHC.Classes.Ord Diplomacy.Game.Round
+ Diplomacy.Game: instance GHC.Enum.Bounded Diplomacy.Game.Round
+ Diplomacy.Game: instance GHC.Enum.Enum Diplomacy.Game.Round
+ Diplomacy.Game: instance GHC.Show.Show (Diplomacy.Game.AdjustRound round)
+ Diplomacy.Game: instance GHC.Show.Show (Diplomacy.Game.RetreatRound round)
+ Diplomacy.Game: instance GHC.Show.Show (Diplomacy.Game.TypicalRound round)
+ Diplomacy.Game: instance GHC.Show.Show Diplomacy.Game.Round
+ Diplomacy.Game: instance GHC.Show.Show Diplomacy.Game.RoundStatus
+ Diplomacy.Game: removeBuildOrders :: (RoundPhase round ~ Adjust) => Set GreatPower -> Game round RoundUnresolved -> Game round RoundUnresolved
+ Diplomacy.GreatPower: [Austria] :: GreatPower
+ Diplomacy.GreatPower: [England] :: GreatPower
+ Diplomacy.GreatPower: [France] :: GreatPower
+ Diplomacy.GreatPower: [Germany] :: GreatPower
+ Diplomacy.GreatPower: [Italy] :: GreatPower
+ Diplomacy.GreatPower: [Russia] :: GreatPower
+ Diplomacy.GreatPower: [Turkey] :: GreatPower
+ Diplomacy.GreatPower: instance GHC.Classes.Eq Diplomacy.GreatPower.GreatPower
+ Diplomacy.GreatPower: instance GHC.Classes.Ord Diplomacy.GreatPower.GreatPower
+ Diplomacy.GreatPower: instance GHC.Enum.Bounded Diplomacy.GreatPower.GreatPower
+ Diplomacy.GreatPower: instance GHC.Enum.Enum Diplomacy.GreatPower.GreatPower
+ Diplomacy.GreatPower: instance GHC.Read.Read Diplomacy.GreatPower.GreatPower
+ Diplomacy.GreatPower: instance GHC.Show.Show Diplomacy.GreatPower.GreatPower
+ Diplomacy.Order: [SomeOrder] :: Order phase order -> SomeOrder phase
+ Diplomacy.Order: [outOrder] :: Order -> (Subject, OrderObject phase order)
+ Diplomacy.Order: instance GHC.Classes.Eq (Diplomacy.Order.Order phase order)
+ Diplomacy.Order: instance GHC.Classes.Eq (Diplomacy.Order.SomeOrder phase)
+ Diplomacy.Order: instance GHC.Classes.Ord (Diplomacy.Order.Order phase order)
+ Diplomacy.Order: instance GHC.Classes.Ord (Diplomacy.Order.SomeOrder phase)
+ Diplomacy.Order: instance GHC.Show.Show (Diplomacy.Order.Order phase order)
+ Diplomacy.Order: instance GHC.Show.Show (Diplomacy.Order.SomeOrder phase)
+ Diplomacy.OrderObject: [BuildObject] :: OrderObject Adjust Build
+ Diplomacy.OrderObject: [ContinueObject] :: OrderObject Adjust Continue
+ Diplomacy.OrderObject: [ConvoyObject] :: Subject -> ProvinceTarget -> OrderObject Typical Convoy
+ Diplomacy.OrderObject: [DisbandObject] :: OrderObject Adjust Disband
+ Diplomacy.OrderObject: [MoveObject] :: ProvinceTarget -> OrderObject Typical Move
+ Diplomacy.OrderObject: [SomeOrderObject] :: OrderObject phase order -> SomeOrderObject phase
+ Diplomacy.OrderObject: [SupportObject] :: Subject -> ProvinceTarget -> OrderObject Typical Support
+ Diplomacy.OrderObject: [SurrenderObject] :: OrderObject Retreat Surrender
+ Diplomacy.OrderObject: [WithdrawObject] :: ProvinceTarget -> OrderObject Retreat Withdraw
+ Diplomacy.OrderObject: instance GHC.Classes.Eq (Diplomacy.OrderObject.OrderObject phase order)
+ Diplomacy.OrderObject: instance GHC.Classes.Ord (Diplomacy.OrderObject.OrderObject phase order)
+ Diplomacy.OrderObject: instance GHC.Show.Show (Diplomacy.OrderObject.OrderObject phase order)
+ Diplomacy.OrderObject: instance GHC.Show.Show (Diplomacy.OrderObject.SomeOrderObject phase)
+ Diplomacy.OrderResolution: [ConvoyNoRoute] :: FailureReason Typical Convoy
+ Diplomacy.OrderResolution: [ConvoyRouteCut] :: [(Zone, Aligned Subject)] -> FailureReason Typical Convoy
+ Diplomacy.OrderResolution: [ConvoyVoid] :: FailureReason Typical Convoy
+ Diplomacy.OrderResolution: [MoveBounced] :: AtLeast One (Aligned Subject) -> FailureReason Typical Move
+ Diplomacy.OrderResolution: [MoveConvoyParadox] :: FailureReason Typical Move
+ Diplomacy.OrderResolution: [MoveFriendlyDislodge] :: Unit -> FailureReason Typical Move
+ Diplomacy.OrderResolution: [MoveNoConvoy] :: FailureReason Typical Move
+ Diplomacy.OrderResolution: [MoveOverpowered] :: AtLeast One (Aligned Subject) -> FailureReason Typical Move
+ Diplomacy.OrderResolution: [SomeResolved] :: Resolved k phase order -> SomeResolved k phase
+ Diplomacy.OrderResolution: [SupportCut] :: AtLeast One (Aligned Subject) -> FailureReason Typical Support
+ Diplomacy.OrderResolution: [SupportDislodged] :: Aligned Subject -> FailureReason Typical Support
+ Diplomacy.OrderResolution: [SupportVoid] :: FailureReason Typical Support
+ Diplomacy.OrderResolution: [WithdrawCollision] :: AtLeast One (Aligned Subject) -> FailureReason Retreat Withdraw
+ Diplomacy.OrderResolution: [convoyRoutesNonParadox] :: ConvoyRoutes -> [ConvoyRoute]
+ Diplomacy.OrderResolution: [convoyRoutesParadox] :: ConvoyRoutes -> [ConvoyRoute]
+ Diplomacy.OrderResolution: instance GHC.Classes.Eq (Diplomacy.OrderResolution.FailureReason phase order)
+ Diplomacy.OrderResolution: instance GHC.Classes.Eq (Diplomacy.OrderResolution.SomeResolved Diplomacy.OrderObject.OrderObject phase)
+ Diplomacy.OrderResolution: instance GHC.Show.Show (Diplomacy.OrderResolution.FailureReason phase order)
+ Diplomacy.OrderResolution: instance GHC.Show.Show (Diplomacy.OrderResolution.SomeResolved Diplomacy.Order.Order phase)
+ Diplomacy.OrderResolution: instance GHC.Show.Show (Diplomacy.OrderResolution.SomeResolved Diplomacy.OrderObject.OrderObject phase)
+ Diplomacy.OrderResolution: instance GHC.Show.Show Diplomacy.OrderResolution.ConvoyRoutes
+ Diplomacy.OrderResolution: instance GHC.Show.Show Diplomacy.OrderResolution.Incumbant
+ Diplomacy.OrderResolution: instance GHC.Show.Show Diplomacy.OrderResolution.MoveClassification
+ Diplomacy.OrderResolution: instance GHC.Show.Show Diplomacy.OrderResolution.RequiresConvoy
+ Diplomacy.OrderResolution: instance GHC.Show.Show Diplomacy.OrderResolution.WouldSucceed
+ Diplomacy.OrderType: [Build] :: OrderType
+ Diplomacy.OrderType: [Continue] :: OrderType
+ Diplomacy.OrderType: [Convoy] :: OrderType
+ Diplomacy.OrderType: [Disband] :: OrderType
+ Diplomacy.OrderType: [Move] :: OrderType
+ Diplomacy.OrderType: [Support] :: OrderType
+ Diplomacy.OrderType: [Surrender] :: OrderType
+ Diplomacy.OrderType: [Withdraw] :: OrderType
+ Diplomacy.OrderValidation: [ALCons] :: g (f t) -> ArgumentList g f ts -> ArgumentList g f (t : ts)
+ Diplomacy.OrderValidation: [ALNil] :: ArgumentList g f '[]
+ Diplomacy.OrderValidation: [AdmissibleNumberOfBuilds] :: AdjustSetValidityCriterion
+ Diplomacy.OrderValidation: [BuildValidSubject] :: ValidityCriterion Adjust Build
+ Diplomacy.OrderValidation: [ContinueValidSubject] :: ValidityCriterion Adjust Continue
+ Diplomacy.OrderValidation: [ConvoyValidConvoySubject] :: ValidityCriterion Typical Convoy
+ Diplomacy.OrderValidation: [ConvoyValidConvoyTarget] :: ValidityCriterion Typical Convoy
+ Diplomacy.OrderValidation: [ConvoyValidSubject] :: ValidityCriterion Typical Convoy
+ Diplomacy.OrderValidation: [DisbandValidSubject] :: ValidityCriterion Adjust Disband
+ Diplomacy.OrderValidation: [MoveReachable] :: ValidityCriterion Typical Move
+ Diplomacy.OrderValidation: [MoveUnitCanOccupy] :: ValidityCriterion Typical Move
+ Diplomacy.OrderValidation: [MoveValidSubject] :: ValidityCriterion Typical Move
+ Diplomacy.OrderValidation: [OnlyContinues] :: AdjustSetValidityCriterion
+ Diplomacy.OrderValidation: [RequiredNumberOfDisbands] :: AdjustSetValidityCriterion
+ Diplomacy.OrderValidation: [SomeValidityCriterion] :: ValidityCriterion phase order -> SomeValidityCriterion phase
+ Diplomacy.OrderValidation: [SupportValidSubject] :: ValidityCriterion Typical Support
+ Diplomacy.OrderValidation: [SupportedCanDoMove] :: ValidityCriterion Typical Support
+ Diplomacy.OrderValidation: [SupporterAdjacent] :: ValidityCriterion Typical Support
+ Diplomacy.OrderValidation: [SupporterCanOccupy] :: ValidityCriterion Typical Support
+ Diplomacy.OrderValidation: [SurrenderValidSubject] :: ValidityCriterion Retreat Surrender
+ Diplomacy.OrderValidation: [VCCons] :: (SuitableFunctor f, SuitableFunctorConstraint f t) => (ArgumentList Identity Identity ts -> TaggedIntersectionOfUnions g f t) -> ValidityCharacterization g f ts -> ValidityCharacterization g f (t : ts)
+ Diplomacy.OrderValidation: [VCNil] :: (SuitableFunctor f) => ValidityCharacterization g f '[]
+ Diplomacy.OrderValidation: [WithdrawAdjacent] :: ValidityCriterion Retreat Withdraw
+ Diplomacy.OrderValidation: [WithdrawNotDislodgingZone] :: ValidityCriterion Retreat Withdraw
+ Diplomacy.OrderValidation: [WithdrawUncontestedZone] :: ValidityCriterion Retreat Withdraw
+ Diplomacy.OrderValidation: [WithdrawUnoccupiedZone] :: ValidityCriterion Retreat Withdraw
+ Diplomacy.OrderValidation: [WithdrawValidSubject] :: ValidityCriterion Retreat Withdraw
+ Diplomacy.OrderValidation: [buildSubjects] :: AdjustSubjects -> Set Subject
+ Diplomacy.OrderValidation: [continueSubjects] :: AdjustSubjects -> Set Subject
+ Diplomacy.OrderValidation: [disbandSubjects] :: AdjustSubjects -> Set Subject
+ Diplomacy.OrderValidation: instance (Diplomacy.OrderValidation.Every GHC.Classes.Ord ts, Diplomacy.OrderValidation.Every GHC.Classes.Eq ts) => GHC.Classes.Ord (Diplomacy.OrderValidation.ArgumentList Data.Functor.Identity.Identity Data.Functor.Identity.Identity ts)
+ Diplomacy.OrderValidation: instance Diplomacy.OrderValidation.Every GHC.Classes.Eq ts => GHC.Classes.Eq (Diplomacy.OrderValidation.ArgumentList Data.Functor.Identity.Identity Data.Functor.Identity.Identity ts)
+ Diplomacy.OrderValidation: instance Diplomacy.OrderValidation.Every GHC.Show.Show ts => GHC.Show.Show (Diplomacy.OrderValidation.ArgumentList Data.Functor.Identity.Identity Data.Functor.Identity.Identity ts)
+ Diplomacy.OrderValidation: instance Diplomacy.OrderValidation.SuitableFunctor Data.Set.Base.Set
+ Diplomacy.OrderValidation: instance Diplomacy.OrderValidation.SuitableFunctor []
+ Diplomacy.OrderValidation: instance GHC.Classes.Eq (Diplomacy.OrderValidation.SomeValidityCriterion phase)
+ Diplomacy.OrderValidation: instance GHC.Classes.Eq (Diplomacy.OrderValidation.ValidityCriterion phase order)
+ Diplomacy.OrderValidation: instance GHC.Classes.Eq Diplomacy.OrderValidation.AdjustSetValidityCriterion
+ Diplomacy.OrderValidation: instance GHC.Classes.Eq Diplomacy.OrderValidation.AdjustSubjects
+ Diplomacy.OrderValidation: instance GHC.Classes.Ord (Diplomacy.OrderValidation.SomeValidityCriterion phase)
+ Diplomacy.OrderValidation: instance GHC.Classes.Ord (Diplomacy.OrderValidation.ValidityCriterion phase order)
+ Diplomacy.OrderValidation: instance GHC.Classes.Ord Diplomacy.OrderValidation.AdjustSetValidityCriterion
+ Diplomacy.OrderValidation: instance GHC.Classes.Ord Diplomacy.OrderValidation.AdjustSubjects
+ Diplomacy.OrderValidation: instance GHC.Show.Show (Diplomacy.OrderValidation.SomeValidityCriterion phase)
+ Diplomacy.OrderValidation: instance GHC.Show.Show (Diplomacy.OrderValidation.ValidityCriterion phase order)
+ Diplomacy.OrderValidation: instance GHC.Show.Show Diplomacy.OrderValidation.AdjustSetValidityCriterion
+ Diplomacy.OrderValidation: instance GHC.Show.Show Diplomacy.OrderValidation.AdjustSubjects
+ Diplomacy.Phase: [Adjust] :: Phase
+ Diplomacy.Phase: [Retreat] :: Phase
+ Diplomacy.Phase: [Typical] :: Phase
+ Diplomacy.Phase: instance GHC.Classes.Eq Diplomacy.Phase.Phase
+ Diplomacy.Phase: instance GHC.Classes.Ord Diplomacy.Phase.Phase
+ Diplomacy.Phase: instance GHC.Enum.Bounded Diplomacy.Phase.Phase
+ Diplomacy.Phase: instance GHC.Enum.Enum Diplomacy.Phase.Phase
+ Diplomacy.Phase: instance GHC.Show.Show Diplomacy.Phase.Phase
+ Diplomacy.Province: instance GHC.Classes.Eq Diplomacy.Province.Province
+ Diplomacy.Province: instance GHC.Classes.Eq Diplomacy.Province.ProvinceCoast
+ Diplomacy.Province: instance GHC.Classes.Eq Diplomacy.Province.ProvinceTarget
+ Diplomacy.Province: instance GHC.Classes.Eq Diplomacy.Province.ProvinceType
+ Diplomacy.Province: instance GHC.Classes.Ord Diplomacy.Province.Province
+ Diplomacy.Province: instance GHC.Classes.Ord Diplomacy.Province.ProvinceCoast
+ Diplomacy.Province: instance GHC.Classes.Ord Diplomacy.Province.ProvinceTarget
+ Diplomacy.Province: instance GHC.Classes.Ord Diplomacy.Province.ProvinceType
+ Diplomacy.Province: instance GHC.Enum.Bounded Diplomacy.Province.Province
+ Diplomacy.Province: instance GHC.Enum.Bounded Diplomacy.Province.ProvinceCoast
+ Diplomacy.Province: instance GHC.Enum.Bounded Diplomacy.Province.ProvinceTarget
+ Diplomacy.Province: instance GHC.Enum.Bounded Diplomacy.Province.ProvinceType
+ Diplomacy.Province: instance GHC.Enum.Enum Diplomacy.Province.Province
+ Diplomacy.Province: instance GHC.Enum.Enum Diplomacy.Province.ProvinceCoast
+ Diplomacy.Province: instance GHC.Enum.Enum Diplomacy.Province.ProvinceTarget
+ Diplomacy.Province: instance GHC.Enum.Enum Diplomacy.Province.ProvinceType
+ Diplomacy.Province: instance GHC.Show.Show Diplomacy.Province.Province
+ Diplomacy.Province: instance GHC.Show.Show Diplomacy.Province.ProvinceCoast
+ Diplomacy.Province: instance GHC.Show.Show Diplomacy.Province.ProvinceTarget
+ Diplomacy.Province: instance GHC.Show.Show Diplomacy.Province.ProvinceType
+ Diplomacy.Season: instance GHC.Classes.Eq Diplomacy.Season.Season
+ Diplomacy.Season: instance GHC.Show.Show Diplomacy.Season.Season
+ Diplomacy.Turn: instance GHC.Classes.Eq Diplomacy.Turn.Turn
+ Diplomacy.Turn: instance GHC.Classes.Ord Diplomacy.Turn.Turn
+ Diplomacy.Turn: instance GHC.Show.Show Diplomacy.Turn.Turn
+ Diplomacy.Unit: [Army] :: Unit
+ Diplomacy.Unit: [Fleet] :: Unit
+ Diplomacy.Unit: instance GHC.Classes.Eq Diplomacy.Unit.Unit
+ Diplomacy.Unit: instance GHC.Classes.Ord Diplomacy.Unit.Unit
+ Diplomacy.Unit: instance GHC.Enum.Bounded Diplomacy.Unit.Unit
+ Diplomacy.Unit: instance GHC.Enum.Enum Diplomacy.Unit.Unit
+ Diplomacy.Unit: instance GHC.Show.Show Diplomacy.Unit.Unit
+ Diplomacy.Zone: instance GHC.Classes.Eq Diplomacy.Zone.Zone
+ Diplomacy.Zone: instance GHC.Classes.Ord Diplomacy.Zone.Zone
+ Diplomacy.Zone: instance GHC.Show.Show Diplomacy.Zone.Zone
+ Diplomacy.ZonedSubject: instance GHC.Classes.Eq Diplomacy.ZonedSubject.ZonedSubjectDull
+ Diplomacy.ZonedSubject: instance GHC.Classes.Eq Diplomacy.ZonedSubject.ZonedSubjectSharp
+ Diplomacy.ZonedSubject: instance GHC.Classes.Ord Diplomacy.ZonedSubject.ZonedSubjectDull
+ Diplomacy.ZonedSubject: instance GHC.Classes.Ord Diplomacy.ZonedSubject.ZonedSubjectSharp
+ Diplomacy.ZonedSubject: instance GHC.Show.Show Diplomacy.ZonedSubject.ZonedSubjectDull
+ Diplomacy.ZonedSubject: instance GHC.Show.Show Diplomacy.ZonedSubject.ZonedSubjectSharp
- Data.AtLeast: AtLeast :: (Vect t n) -> [t] -> AtLeast
+ Data.AtLeast: AtLeast :: (Vect n t) -> [t] -> AtLeast
- Data.AtLeast: weaken :: LTE n m => AtLeast m t -> AtLeast n t
+ Data.AtLeast: weaken :: forall n m t. LTE n m => AtLeast m t -> AtLeast n t
- Diplomacy.Game: gameDislodged :: RoundPhase round ~ Retreat => Game round RoundUnresolved -> Map Zone (Aligned Unit)
+ Diplomacy.Game: gameDislodged :: (RoundPhase round ~ Retreat) => Game round RoundUnresolved -> Map Zone (Aligned Unit)
- Diplomacy.Game: issueOrders :: Map Zone (Aligned Unit, SomeOrderObject (RoundPhase round)) -> Game round RoundUnresolved -> (ValidateOrdersOutput (RoundPhase round), Game round RoundUnresolved)
+ Diplomacy.Game: issueOrders :: forall round. Map Zone (Aligned Unit, SomeOrderObject (RoundPhase round)) -> Game round RoundUnresolved -> (ValidateOrdersOutput (RoundPhase round), Game round RoundUnresolved)

Files

Data/AtLeast.hs view
@@ -38,7 +38,7 @@ import Data.TypeNat.Nat import Data.TypeNat.Vect -data AtLeast (n :: Nat) (t :: *) = AtLeast (Vect t n) [t]+data AtLeast (n :: Nat) (t :: *) = AtLeast (Vect n t) [t]  -- Equality ignores order of elements. instance Eq t => Eq (AtLeast n t) where
Diplomacy/Game.hs view
@@ -42,6 +42,7 @@   , gameRound   , gameSeason   , issueOrders+  , removeBuildOrders   , resolve   , continue   , newGame@@ -456,9 +457,13 @@  -- | The game given as the second component of the return value will differ --   from the input game only if all orders are valid.---   NB for adjust phase we wipe all build orders; that's because there's+--+--   NB for adjust phase we wipe all build orders for every great power with+--   at least one order appearing in the input order set; that's because there's --   no way to explicitly remove a build order by overwriting it with some---   other order.+--   other order. This is due to the way we represent build orders: they are+--   in the game map alongside a unit which doesn't really exist yet. Removing+--   this order involves removing that entry in the map. issueOrders     :: forall round .        M.Map Zone (Aligned Unit, SomeOrderObject (RoundPhase round))@@ -466,7 +471,13 @@     -> (ValidateOrdersOutput (RoundPhase round), Game round RoundUnresolved) issueOrders orders game =     let nextGame = case game of-            AdjustGame AdjustRound _ _ _ _ -> issueOrdersUnsafe orders (removeBuildOrders game)+            AdjustGame AdjustRound _ _ _ _ -> issueOrdersUnsafe orders (removeBuildOrders greatPowers game)+              where+                -- All great powers who have an order in the orders set.+                greatPowers :: S.Set GreatPower+                greatPowers = M.fold pickGreatPower S.empty orders+                pickGreatPower :: (Aligned Unit, t) -> S.Set GreatPower -> S.Set GreatPower+                pickGreatPower (aunit, _) = S.insert (alignedGreatPower aunit)             _ -> issueOrdersUnsafe orders game         validation :: ValidateOrdersOutput (RoundPhase round)         allValid :: Bool@@ -671,17 +682,20 @@  removeBuildOrders     :: (RoundPhase round ~ Adjust)-    => Game round RoundUnresolved+    => S.Set GreatPower     -> Game round RoundUnresolved-removeBuildOrders game = case game of+    -> Game round RoundUnresolved+removeBuildOrders greatPowers game = case game of     AdjustGame AdjustRound s t zonedOrders c ->-        let zonedOrders' = M.filter (not . isBuild) zonedOrders+        let zonedOrders' = M.filter (not . shouldRemove) zonedOrders         in  AdjustGame AdjustRound s t zonedOrders' c   where-    isBuild :: (Aligned Unit, SomeOrderObject Adjust) -> Bool-    isBuild (_, SomeOrderObject object) = case object of-        BuildObject -> True+    shouldRemove :: (Aligned Unit, SomeOrderObject Adjust) -> Bool+    shouldRemove (aunit, SomeOrderObject object) = case (S.member greatPower greatPowers, object) of+        (True, BuildObject) -> True         _ -> False+      where+        greatPower = alignedGreatPower aunit  resolve     :: Game round RoundUnresolved
Diplomacy/OrderValidation.hs view
@@ -237,24 +237,29 @@     -> S.Set ProvinceTarget validSupportTargets subject = S.fromList $ do     x <- S.toList $ validMoveAdjacency Nothing subject+    guard (S.member x (unitCanOccupy (subjectUnit subject)))     provinceTargetCluster x --- | Valid support targets depend upon the support subject AND its chosen---   target! For example, if we choose to support into Brest, then a fleet---   in the Tyrrhenian Sea cannot be the support subject.+-- | Given two ProvinceTargets--the place from which support comes, and the+--   place to which support is directed--we can use an Occupation to discover+--   every subject which could be supported by this hypothetical supporter. validSupportSubjects     :: Occupation-    -> Subject-    -> ProvinceTarget+    -> ProvinceTarget -- ^ Source+    -> ProvinceTarget -- ^ Target     -> S.Set Subject-validSupportSubjects occupation subject target = M.foldWithKey f S.empty occupation+validSupportSubjects occupation source target = M.foldWithKey f S.empty occupation   where-    pt = subjectProvinceTarget subject     f zone aunit =-        -- validMoveTargets will give us non-hold targets, so we explicitly-        -- handle the case of a hold.-        if    target == zoneProvinceTarget zone-           || S.member target (validMoveTargets (Just occupation) subject')+        if    Zone source /= zone+           -- validMoveTargets will give us non-hold targets, so we explicitly+           -- handle the case of a hold.+           && (Zone target == zone+           -- If the subject here could move to the target, then it's a valid+           -- support target. We are careful *not* to use Zone-equality here,+           -- because in the case of supporting fleets into coastal territories,+           -- we want to rule out supporting to an unreachable coast.+           || S.member target (validMoveTargets (Just occupation) subject'))         then S.insert subject'         else id       where@@ -830,14 +835,14 @@     vc = -- Given a subject for the supporter, and a target for the support, we          -- characterize every valid subject which can be supported.          VCCons (\(ALCons (Identity (Identity pt)) (ALCons (Identity (Identity subject1)) ALNil)) -> Intersection [-              (SupportedCanDoMove, Union [S.filter (/= subject1) (validSupportSubjects occupation subject1 pt)])+              (SupportedCanDoMove, Union [S.filter (/= subject1) (validSupportSubjects occupation (subjectProvinceTarget subject1) pt)])             ])-        -- Given a subject for the supporter, we check every place into which-        -- that supporter could offer support; that's every place where it-        -- could move without a convoy.+        -- Given a subject (the one who offers support), we check every place+        -- into which that supporter could offer support; that's every place+        -- where it could move without a convoy (or one of the special coasts+        -- of that place).         . VCCons (\(ALCons (Identity (Identity subject)) ALNil) -> Intersection [-              (SupporterCanOccupy, Union [unitCanOccupy (subjectUnit subject)])-            , (SupporterAdjacent, Union [validSupportTargets subject])+              (SupporterAdjacent, Union [validSupportTargets subject])             ])         . VCCons (\ALNil -> Intersection [(SupportValidSubject, Union [S.fromList (allSubjects (Just greatPower) occupation)])])         $ VCNil
Diplomacy/Province.hs view
@@ -72,6 +72,7 @@ import qualified Data.Set as S import Data.String (fromString, IsString) import Data.List (sort)+import Data.Char (toUpper, toLower) import Diplomacy.GreatPower import Text.Parsec hiding ((<|>)) import Text.Parsec.Text@@ -741,7 +742,7 @@     reps pr = let (s, ss) = provinceStringRepresentations pr               in  (pr, s, ss)     makeParser :: (Province, String) -> Parser Province-    makeParser (p, s) = try (string s) *> pure p+    makeParser (p, s) = try (ciString s) *> pure p  provinceCoastStringRepresentations :: ProvinceCoast -> [String] provinceCoastStringRepresentations pc = provinceReps >>= addSuffix@@ -774,7 +775,7 @@     bundleReps pc = let ss = provinceCoastStringRepresentations pc                     in  (pc, ss)     makeParser :: (ProvinceCoast, [String]) -> Parser ProvinceCoast-    makeParser (pc, ss) = choice (fmap (try . string) ss) *> pure pc+    makeParser (pc, ss) = choice (fmap (try . ciString) ss) *> pure pc  parseProvinceTarget :: Parser ProvinceTarget parseProvinceTarget = try parseSpecial <|> parseNormal@@ -857,3 +858,10 @@         case indicator x of             Just y -> return (y, first, rest)             Nothing -> empty++-- case-insensitive string parser.+ciString :: String -> Parser String+ciString = mapM ciChar++ciChar :: Char -> Parser Char+ciChar c = char (toLower c) <|> char (toUpper c)
Diplomacy/Unit.hs view
@@ -41,9 +41,9 @@ parseUnit = parseFleet <|> parseArmy   where     parseFleet :: Parser Unit-    parseFleet = char 'F' *> pure Fleet+    parseFleet = (char 'F' <|> char 'f') *> pure Fleet     parseArmy :: Parser Unit-    parseArmy = char 'A' *> pure Army+    parseArmy = (char 'A' <|> char 'a') *> pure Army  printUnit :: IsString a => Unit -> a printUnit unit = case unit of
diplomacy.cabal view
@@ -2,20 +2,23 @@ -- documentation, see http://haskell.org/cabal/users-guide/  name:                diplomacy-version:             0.1.0.0-synopsis:            The board game Diplomacy, spoken in Haskell--- description:         +version:             0.2.0.0+synopsis:            Diplomacy board game+description:         The board game Diplomacy, spoken in Haskell homepage:            https://github.com/avieth/diplomacy license:             BSD3 license-file:        LICENSE author:              Alexander Vieth maintainer:          aovieth@gmail.com -- copyright:           --- category:            +category:            Games build-type:          Simple extra-source-files:  README.md cabal-version:       >=1.10 +source-repository head+  type: git+  location: http://github.com/avieth/diplomacy.git  library   exposed-modules:     Diplomacy.OrderObject@@ -59,12 +62,11 @@                      , RankNTypes                      , PatternSynonyms -  build-depends:       base >=4.7 && <4.8+  build-depends:       base >=4.7 && <4.11                      , containers >=0.5 && <0.6-                     , transformers >=0.3 && <0.4+                     , transformers >=0.3 && <0.6                      , HUnit >=1.2 && <1.3-                     , TypeNat >=0.4 && <0.5+                     , TypeNat >=0.5 && <0.6                      , parsec >= 3.1 && <3.2   -- hs-source-dirs:         default-language:    Haskell2010-