Nomyx-Language 0.2.1 → 0.2.2
raw patch · 10 files changed
+36/−24 lines, 10 files
Files
- Nomyx-Language.cabal +1/−1
- src/Language/Nomyx.hs +3/−1
- src/Language/Nomyx/Definition.hs +12/−2
- src/Language/Nomyx/Evaluation.hs +0/−4
- src/Language/Nomyx/Examples.hs +13/−10
- src/Language/Nomyx/Expression.hs +1/−1
- src/Language/Nomyx/Game.hs +0/−1
- src/Language/Nomyx/Test.hs +1/−1
- src/Language/Nomyx/Utils.hs +3/−1
- src/Language/Nomyx/Vote.hs +2/−2
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]