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 +1/−1
- Diplomacy/Game.hs +23/−9
- Diplomacy/OrderValidation.hs +22/−17
- Diplomacy/Province.hs +10/−2
- Diplomacy/Unit.hs +2/−2
- diplomacy.cabal +10/−8
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-