packages feed

Nomyx-Language 0.2.2 → 0.2.3

raw patch · 7 files changed

+35/−29 lines, 7 files

Files

Nomyx-Language.cabal view
@@ -1,5 +1,5 @@ name: Nomyx-Language-version: 0.2.2+version: 0.2.3 cabal-version: >=1.6 ---Warning: For using "cabal sdist", this patch is needed in cabal: https://github.com/haskell/cabal/pull/1110 ---To allow sdist to work with exported generated modules (Paths_Nomyx_Language)
src/Language/Nomyx/Evaluation.hs view
@@ -65,13 +65,13 @@    events %= ((EH en rn event handler EvActive) : )    return en -evalExp (DelEvent en) rn = evDelEvent en rn+evalExp (DelEvent en) _ = evDelEvent en -evalExp (DelAllEvents e) rn = do+evalExp (DelAllEvents e) _ = do    evs <- access events    let filtered = filter (\EH {event} -> event === e) evs    --traceM ("DelAllEvents: deleting " ++ show filtered)-   mapM_ (\e -> evDelEvent e rn) (_eventNumber <$> filtered)+   mapM_ (\e -> evDelEvent e) (_eventNumber <$> filtered)  evalExp (SendMessage (Message id) myData) _ = triggerEvent_ (Message id) (MessageData myData) @@ -255,8 +255,8 @@          players ~= replaceWith ((== pn) . getL playerNumber) (PlayerInfo pn name) pls          return True -evDelEvent :: EventNumber -> RuleNumber -> Evaluate Bool-evDelEvent en _ = do+evDelEvent :: EventNumber -> Evaluate Bool+evDelEvent en = do    --traceM ("DelEvent: called with en=" ++ (show en))    evs <- access events    case find ((== en) . getL eventNumber) evs of@@ -287,8 +287,10 @@  --delete all events of a rule delEventsRule :: RuleNumber -> Evaluate ()-delEventsRule rn = void $ events %= filter ((/= rn) . getL ruleNumber)-+delEventsRule rn = do+   evs <- access events+   let toDelete = filter ((== rn) . getL ruleNumber) evs+   mapM_ (evDelEvent . _eventNumber) toDelete  runEvalError :: PlayerNumber -> Evaluate () -> State Game () runEvalError pn egs = do
src/Language/Nomyx/Examples.hs view
@@ -20,8 +20,7 @@ import Data.List import Control.Monad import Language.Nomyx.Vote-       (elections, referendum, assessOnTimeDelay, assessOnEveryVotes,-        withQuorum, majority, voteWith_)+       (elections, referendum, assessOnTimeDelay, assessOnEveryVote, withQuorum, majority, voteWith_) import Language.Nomyx.Utils (oneDay)  -- | A rule that does nothing@@ -131,13 +130,13 @@ -- the vote is assessed after every vote in case the winner is already known -- the vote will finish anyway after one day voteWithMajority :: RuleFunc-voteWithMajority = onRuleProposed $ voteWith_ (majority `withQuorum` 2) $ assessOnEveryVotes >> assessOnTimeDelay oneDay+voteWithMajority = onRuleProposed $ voteWith_ (majority `withQuorum` 2) $ assessOnEveryVote >> assessOnTimeDelay oneDay  -- | Change current system (the rules passed in parameter) to absolute majority (half participants plus one) returnToDemocracy :: [RuleNumber] -> RuleFunc returnToDemocracy rs = voidRule $ do    mapM_ suppressRule rs-   rNum <- addRuleParams "vote with majority" voteWithMajority "voteWithMajority" "meta-rule: return true if a majority of players vote positively for a new rule"+   rNum <- addRuleParams "vote with majority" voteWithMajority "voteWithMajority" "majority with a quorum of 2"    activateRule_ rNum    autoDelete 
src/Language/Nomyx/Game.hs view
@@ -10,7 +10,7 @@ module Language.Nomyx.Game (GameEvent(..), update, update', LoggedGame(..), game, gameLog, emptyGame,   execWithGame, execWithGame', outputAll, getLoggedGame, tracePN, getTimes, activeRules, pendingRules, rejectedRules)  where -import Prelude hiding (catch)+import Prelude import Control.Monad.State import Data.List import Language.Nomyx hiding (outputAll)
src/Language/Nomyx/Rule.hs view
@@ -89,6 +89,11 @@ --manages players joining and leaving
 createValueForEachPlayer_ :: V [(Int, Int)] -> Nomex ()
 createValueForEachPlayer_ = createValueForEachPlayer 0
++getValueOfPlayer :: PlayerNumber -> V [(Int, Int)] -> Nomex (Maybe Int)+getValueOfPlayer pn var = do+   value <- readVar_ var+   return $ lookup pn value 
 modifyValueOfPlayer :: PlayerNumber -> V [(Int, Int)] -> (Int -> Int) -> Nomex ()
 modifyValueOfPlayer pn var f = modifyVar var $ map $ (\(a,b) -> if a == pn then (a, f b) else (a,b))
src/Language/Nomyx/Test.hs view
@@ -58,10 +58,10 @@          ("test time event 2", testTimeEventEx2),          ("test assess on vote complete 1", testVoteAssessOnVoteComplete1),          ("test assess on vote complete 2", testVoteAssessOnVoteComplete2),-         ("test assess on every vote 1", testVoteAssessOnEveryVotes1),-         ("test assess on every vote 2", testVoteAssessOnEveryVotes2),-         ("test assess on every vote 3", testVoteAssessOnEveryVotes3),-         ("test assess on every vote 4", testVoteAssessOnEveryVotes4),+         ("test assess on every vote 1", testVoteAssessOnEveryVote1),+         ("test assess on every vote 2", testVoteAssessOnEveryVote2),+         ("test assess on every vote 3", testVoteAssessOnEveryVote3),+         ("test assess on every vote 4", testVoteAssessOnEveryVote4),          ("test majority with", testVoteMajorityWith),          ("test number positive votes", testVoteNumberPositiveVotes),          ("test vote with quorum 1", testVoteWithQuorum1),@@ -258,14 +258,14 @@ -- vote rules                                |Expected result        |pos |neg |total                    |description of voting system testVoteAssessOnVoteComplete1 = testVoteRule Active  $ voteGame      10 0 10 $ onRuleProposed $ voteWith_ majority $ assessWhenEverybodyVoted testVoteAssessOnVoteComplete2 = testVoteRule Pending $ voteGame      9  0 10 $ onRuleProposed $ voteWith_ majority $ assessWhenEverybodyVoted-testVoteAssessOnEveryVotes1   = testVoteRule Active  $ voteGame      10 0 10 $ onRuleProposed $ voteWith_ unanimity $ assessOnEveryVotes-testVoteAssessOnEveryVotes2   = testVoteRule Active  $ voteGame      6  0 10 $ onRuleProposed $ voteWith_ majority $ assessOnEveryVotes-testVoteAssessOnEveryVotes3   = testVoteRule Pending $ voteGame      5  0 10 $ onRuleProposed $ voteWith_ majority $ assessOnEveryVotes-testVoteAssessOnEveryVotes4   = testVoteRule Reject  $ voteGame      0  5 10 $ onRuleProposed $ voteWith_ majority $ assessOnEveryVotes-testVoteMajorityWith          = testVoteRule Active  $ voteGame      6  0 10 $ onRuleProposed $ voteWith_ (majorityWith 50) $ assessOnEveryVotes-testVoteNumberPositiveVotes   = testVoteRule Active  $ voteGame      3  7 10 $ onRuleProposed $ voteWith_ (numberVotes 3) $ assessOnEveryVotes-testVoteWithQuorum1           = testVoteRule Active  $ voteGame      7  3 10 $ onRuleProposed $ voteWith_ (majority `withQuorum` 7) $ assessOnEveryVotes-testVoteWithQuorum2           = testVoteRule Pending $ voteGame      6  0 10 $ onRuleProposed $ voteWith_ (majority `withQuorum` 7) $ assessOnEveryVotes+testVoteAssessOnEveryVote1   = testVoteRule Active  $ voteGame      10 0 10 $ onRuleProposed $ voteWith_ unanimity $ assessOnEveryVote+testVoteAssessOnEveryVote2   = testVoteRule Active  $ voteGame      6  0 10 $ onRuleProposed $ voteWith_ majority $ assessOnEveryVote+testVoteAssessOnEveryVote3   = testVoteRule Pending $ voteGame      5  0 10 $ onRuleProposed $ voteWith_ majority $ assessOnEveryVote+testVoteAssessOnEveryVote4   = testVoteRule Reject  $ voteGame      0  5 10 $ onRuleProposed $ voteWith_ majority $ assessOnEveryVote+testVoteMajorityWith          = testVoteRule Active  $ voteGame      6  0 10 $ onRuleProposed $ voteWith_ (majorityWith 50) $ assessOnEveryVote+testVoteNumberPositiveVotes   = testVoteRule Active  $ voteGame      3  7 10 $ onRuleProposed $ voteWith_ (numberVotes 3) $ assessOnEveryVote+testVoteWithQuorum1           = testVoteRule Active  $ voteGame      7  3 10 $ onRuleProposed $ voteWith_ (majority `withQuorum` 7) $ assessOnEveryVote+testVoteWithQuorum2           = testVoteRule Pending $ voteGame      6  0 10 $ onRuleProposed $ voteWith_ (majority `withQuorum` 7) $ assessOnEveryVote testVoteAssessOnTimeLimit1    = testVoteRule Active  $ voteGameTimed 10 0 10 $ onRuleProposed $ voteWith_ unanimity $ assessOnTimeLimit date2 testVoteAssessOnTimeLimit2    = testVoteRule Active  $ voteGameTimed 1  0 10 $ onRuleProposed $ voteWith_ unanimity $ assessOnTimeLimit date2 testVoteAssessOnTimeLimit3    = testVoteRule Reject  $ voteGameTimed 1  0 10 $ onRuleProposed $ voteWith_ (unanimity `withQuorum` 5) $ assessOnTimeLimit date2
src/Language/Nomyx/Vote.hs view
@@ -52,7 +52,7 @@   
--- | Performs a vote.+-- | Perform a vote. voteWith :: (Votable a) => VoteResult a         -- ^ the function used to count the votes.                         -> Assessor a           -- ^ assessors: when and how to perform the vote assessment (several assessors can be chained).                         -> a                    -- ^ toVote: the matter to be voted.@@ -77,8 +77,8 @@  
 -- | assess the vote on every new vote with the assess function, and as soon as the vote has an issue (positive of negative), sends a signal
-assessOnEveryVotes :: (Votable a) => Assessor a
-assessOnEveryVotes = do
+assessOnEveryVote :: (Votable a) => Assessor a
+assessOnEveryVote = do
    (VoteData msgEnd voteVar _ assess) <- get
    lift $ do
       msgVotes <- getArrayVarMessage voteVar
@@ -193,7 +193,7 @@  referendum :: String -> Nomex () -> RuleFunc referendum name action = voidRule $ do-   msg <- voteWith_ (majority `withQuorum` 2) (assessOnEveryVotes >> assessOnTimeDelay oneDay) (Referendum name)+   msg <- voteWith_ (majority `withQuorum` 2) (assessOnEveryVote >> assessOnTimeDelay oneDay) (Referendum name)    onMessageOnce msg resolution where       resolution (MessageData [Yes]) = do             outputAll "Positive result of referendum"