packages feed

Nomyx-Language 0.2.1 → 0.2.2

raw patch · 10 files changed

+36/−24 lines, 10 files

Files

Nomyx-Language.cabal view
@@ -1,5 +1,5 @@ name: Nomyx-Language-version: 0.2.1+version: 0.2.2 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.hs view
@@ -5,7 +5,8 @@    module Language.Nomyx.Rule,    module Language.Nomyx.Examples,    module Language.Nomyx.Evaluation,-   module Language.Nomyx.Vote)  where+   module Language.Nomyx.Vote,+   module Language.Nomyx.Utils)  where  import Language.Nomyx.Expression import Language.Nomyx.Definition@@ -13,5 +14,6 @@ import Language.Nomyx.Examples import Language.Nomyx.Evaluation import Language.Nomyx.Vote+import Language.Nomyx.Utils  
src/Language/Nomyx/Definition.hs view
@@ -256,8 +256,18 @@ addRule_ :: Rule -> Nomex ()
 addRule_ r = void $ AddRule r
 
-addRuleParams_ :: RuleName -> RuleFunc -> RuleCode -> RuleNumber -> String -> Nomex ()
-addRuleParams_ name func code number desc = addRule_ $ defaultRule {_rName = name, _rRuleFunc = func, _rRuleCode = code, _rNumber = number, _rDescription = desc}
+addRuleParams :: RuleName -> RuleFunc -> RuleCode -> String -> Nomex RuleNumber
+addRuleParams name func code desc = do+   number <- getFreeRuleNumber+   res <- addRule $ defaultRule {_rName = name, _rRuleFunc = func, _rRuleCode = code, _rNumber = number, _rDescription = desc}+   return $ if res then number else error "addRuleParams: cannot add rule"+   
++getFreeRuleNumber :: Nomex RuleNumber+getFreeRuleNumber = do+   rs <- getRules+   return $ getFreeNumber $ map _rNumber rs+ 
 --suppresses completly a rule and its environment from the system
 suppressRule :: RuleNumber -> Nomex Bool
src/Language/Nomyx/Evaluation.hs view
@@ -152,10 +152,6 @@ outputS :: PlayerNumber -> String -> Evaluate () outputS pn s = void $ outputs %= ((pn, s) : ) -getFreeNumber :: (Eq a, Num a, Enum a) => [a] -> a-getFreeNumber l = head [a| a <- [1..], not $ a `elem` l]-- evProposeRule :: Rule -> Evaluate Bool evProposeRule rule = do    rs <- access rules
src/Language/Nomyx/Examples.hs view
@@ -7,7 +7,7 @@ module Language.Nomyx.Examples(nothing, helloWorld, accounts, createBankAccount, winXEcuPerDay,     winXEcuOnRuleAccepted, moneyTransfer, delRule, voteWithMajority, king, makeKing, monarchy,     revolution, victoryXRules, victoryXEcu, displayTime, noGroupVictory, iWin, returnToDemocracy,-    banPlayer, referendum, referendumOnKickPlayer, gameMasterElections,+    banPlayer, referendum, referendumOnKickPlayer, gameMasterElections, gameMaster,     module Data.Time.Recurrence, module Control.Monad, module Data.List, module Data.Time.Clock) where  import Language.Nomyx.Definition@@ -91,8 +91,8 @@ revolution player = voidRule $ do     suppressRule 1     makeKing player-    addRuleParams_ "Monarchy" monarchy "monarchy" 1 "Monarchy: only the king can vote on new rules"-    activateRule_ 1+    rNum <- addRuleParams "Monarchy" monarchy "monarchy" "Monarchy: only the king can vote on new rules"+    activateRule_ rNum     --autoDelete  -- | set the victory for players having more than X accepted rules@@ -126,16 +126,19 @@ iWin = voidRule $ getSelfProposedByPlayer >>= giveVictory  --- | a majority vote,+-- | a majority vote, with the folowing parameters:+-- a quorum of 2 voters is necessary for the validity of the vote+-- 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 --- | Change unanimity vote (usually rule 1) to absolute majority (half participants plus one)-returnToDemocracy :: RuleFunc-returnToDemocracy = voidRule $ do-   suppressRule 1-   addRuleParams_ "vote with majority" voteWithMajority "voteWithMajority" 1 "meta-rule: return true if a majority of players vote positively for a new rule"-   activateRule_ 1+-- | 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"+   activateRule_ rNum    autoDelete  -- | kick a player and prevent him from returning
src/Language/Nomyx/Expression.hs view
@@ -179,7 +179,7 @@          _evStatus    :: EventStatus} -> EventHandler
 
 instance Show EventHandler where
-    show (EH en rn e _ _) = (show en) ++ " " ++ " " ++ (show rn) ++ " (" ++ (show e) ++"),\n"
+    show (EH en rn e _ _) = (show en) ++ " " ++ (show rn) ++ " (" ++ (show e) ++"),\n"
 
 instance Eq EventHandler where
     (EH {_eventNumber=e1}) == (EH {_eventNumber=e2}) = e1 == e2
src/Language/Nomyx/Game.hs view
@@ -18,7 +18,6 @@ import Control.Category ((>>>)) import Data.Lens.Template import Control.Exception-import Language.Nomyx.Utils   data TimedEvent = TimedEvent UTCTime GameEvent deriving (Show, Read, Eq, Ord)
src/Language/Nomyx/Test.hs view
@@ -263,7 +263,7 @@ 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_ (numberPositiveVotes 3) $ 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 testVoteAssessOnTimeLimit1    = testVoteRule Active  $ voteGameTimed 10 0 10 $ onRuleProposed $ voteWith_ unanimity $ assessOnTimeLimit date2
src/Language/Nomyx/Utils.hs view
@@ -12,7 +12,6 @@ import Control.Monad.State import Control.Monad.Identity import Debug.Trace (trace)-import Data.List (intersperse)  -- | durations oneWeek, oneDay, oneHour, oneMinute :: NominalDiffTime
@@ -52,3 +51,6 @@  mapStateIO :: Show s => State s a -> StateT s IO a mapStateIO = mapStateT $ return . runIdentity++getFreeNumber :: (Eq a, Num a, Enum a) => [a] -> a+getFreeNumber l = head [a| a <- [1..], not $ a `elem` l]
src/Language/Nomyx/Vote.hs view
@@ -142,8 +142,8 @@ majorityWith x vs = voteQuota ((nbVoters vs) * x `div` 100 + 1) vs
 
 -- | assess the vote results according to a necessary number of positive votes
-numberPositiveVotes :: (Votable a) => Int -> VoteStats a -> [Alts a]
-numberPositiveVotes i vs = voteQuota i vs
+numberVotes :: (Votable a) => Int -> VoteStats a -> [Alts a]
+numberVotes i vs = voteQuota i vs
 
 -- | return the vote alternatives that are above threshold
 voteQuota :: forall a. (Votable a) => Int -> VoteStats a -> [Alts a]