diplomacy-0.1.0.0: Diplomacy/SupplyCentreDeficit.hs
{-|
Module : Diplomacy.SupplyCentreDeficit
Description : Compute the supply centre deficit for a 'GreatPower'.
Copyright : (c) Alexander Vieth, 2015
Licence : BSD3
Maintainer : aovieth@gmail.com
Stability : experimental
Portability : non-portable (GHC only)
-}
{-# LANGUAGE AutoDeriveTypeable #-}
module Diplomacy.SupplyCentreDeficit (
SupplyCentreDeficit
, supplyCentreDeficit
) where
import qualified Data.Map as M
import Diplomacy.GreatPower
import Diplomacy.Occupation
import Diplomacy.Control
import Diplomacy.Province
import Diplomacy.Aligned
import Diplomacy.Unit
type SupplyCentreDeficit = Int
supplyCentreDeficit
:: GreatPower
-> Occupation
-> Control
-> SupplyCentreDeficit
supplyCentreDeficit greatPower occupation control = unitCount - supplyCentreCount
where
unitCount = M.fold unitCountFold 0 occupation
supplyCentreCount = M.foldWithKey supplyCentreCountFold 0 control
unitCountFold :: Aligned Unit -> Int -> Int
unitCountFold aunit
| alignedGreatPower aunit == greatPower = (+) 1
| otherwise = id
supplyCentreCountFold :: Province -> GreatPower -> Int -> Int
supplyCentreCountFold pr greatPower'
| greatPower' == greatPower
&& elem pr supplyCentres = (+) 1
| otherwise = id