majurity-judgment-2.0.2.20190414: Majority Judgment voting system.
Safe HaskellNone
LanguageHaskell2010

Majurity.Judgment.Value

Synopsis

Type MajorityValue

newtype MajorityValue grade Source #

A MajorityValue is a list of grades made from the successive lower middlemosts of a Merit, i.e. from the most consensual majorityGrade to the least.

For using less resources and generalizing to non-integral Shares, this MajorityValue is actually encoded as an Abbreviated Majority Value, instead of a big list of grades.

Constructors

MajorityValue [Middle grade] 

Instances

Instances details
Eq grade => Eq (MajorityValue grade) Source # 
Instance details

Defined in Majurity.Judgment.Value

Methods

(==) :: MajorityValue grade -> MajorityValue grade -> Bool #

(/=) :: MajorityValue grade -> MajorityValue grade -> Bool #

Ord grade => Ord (MajorityValue grade) Source # 
Instance details

Defined in Majurity.Judgment.Value

Methods

compare :: MajorityValue grade -> MajorityValue grade -> Ordering #

(<) :: MajorityValue grade -> MajorityValue grade -> Bool #

(<=) :: MajorityValue grade -> MajorityValue grade -> Bool #

(>) :: MajorityValue grade -> MajorityValue grade -> Bool #

(>=) :: MajorityValue grade -> MajorityValue grade -> Bool #

max :: MajorityValue grade -> MajorityValue grade -> MajorityValue grade #

min :: MajorityValue grade -> MajorityValue grade -> MajorityValue grade #

Show grade => Show (MajorityValue grade) Source # 
Instance details

Defined in Majurity.Judgment.Value

Methods

showsPrec :: Int -> MajorityValue grade -> ShowS #

show :: MajorityValue grade -> String #

showList :: [MajorityValue grade] -> ShowS #

Type Middle

data Middle grade Source #

A centered middle of a Merit. Needed to handle the Fractional capabilities of a Share.

By construction in majorityValue, lowGrade is always lower or equal to highGrade.

Constructors

Middle 

Fields

Instances

Instances details
Eq grade => Eq (Middle grade) Source # 
Instance details

Defined in Majurity.Judgment.Value

Methods

(==) :: Middle grade -> Middle grade -> Bool #

(/=) :: Middle grade -> Middle grade -> Bool #

Ord grade => Ord (Middle grade) Source # 
Instance details

Defined in Majurity.Judgment.Value

Methods

compare :: Middle grade -> Middle grade -> Ordering #

(<) :: Middle grade -> Middle grade -> Bool #

(<=) :: Middle grade -> Middle grade -> Bool #

(>) :: Middle grade -> Middle grade -> Bool #

(>=) :: Middle grade -> Middle grade -> Bool #

max :: Middle grade -> Middle grade -> Middle grade #

min :: Middle grade -> Middle grade -> Middle grade #

Show grade => Show (Middle grade) Source # 
Instance details

Defined in Majurity.Judgment.Value

Methods

showsPrec :: Int -> Middle grade -> ShowS #

show :: Middle grade -> String #

showList :: [Middle grade] -> ShowS #

majorityValue :: Ord grade => Merit grade -> MajorityValue grade Source #

The majorityValue is the list of the Middles of the Merit of a choice, from the most consensual to the least.

majorityGrade :: Ord grade => MajorityValue grade -> Maybe grade Source #

The majorityGrade is the lower middlemost (also known as median by experts) of the grades given to a choice by the Judges.

It is the highest grade approved by an absolute majority of the Judges: more than 50% of the Judges give the choice at least a grade of majorityGrade, but every grade lower than majorityGrade is rejected by an absolute majority Thus the majorityGrade of a choice is the final grade wished by the majority.

The majorityGrade is necessarily a word that belongs to grades, and it has an absolute meaning.

When the number of Judges is even, there is a middle-interval (which can, of course, be reduced to a single grade if the two middle grades are the same), then the majorityGrade is the lowest grade of the middle-interval (the “lower middlemost” when there are two in the middle), which is the only one which respects consensus: any other choice whose grades are all within this middle-interval, has a majorityGrade which is greater or equal to this lower middlemost.

Type MajorityRanking

type MajorityRanking choice grade = [(choice, MajorityValue grade)] Source #

majorityValueByChoice :: Ord grade => MeritByChoice choice grade -> HashMap choice (MajorityValue grade) Source #

majorityRanking :: Ord grade => MeritByChoice choice grade -> MajorityRanking choice grade Source #

The majorityRanking ranks all the choices on the basis of their grades.

Choice A ranks higher than choice B in the majorityRanking if and only if A’s majorityValue is lexicographically above B’s. There can be no tie unless two choices have precisely the same majorityValues.

expandValue :: Eq grade => MajorityValue grade -> [grade] Source #

Expand a MajorityValue such that each grade has a Share of '1'.

WARNING: the resulting list of grades may have a different length than the list of grades used to build the Merit.

normalizeMajorityValue :: MajorityValue grade -> MajorityValue grade Source #

normalizeMajorityValue m multiply all Shares by their least common denominator to get integral Shares.

Orphan instances

Ord grade => Ord (Merit grade) Source # 
Instance details

Methods

compare :: Merit grade -> Merit grade -> Ordering #

(<) :: Merit grade -> Merit grade -> Bool #

(<=) :: Merit grade -> Merit grade -> Bool #

(>) :: Merit grade -> Merit grade -> Bool #

(>=) :: Merit grade -> Merit grade -> Bool #

max :: Merit grade -> Merit grade -> Merit grade #

min :: Merit grade -> Merit grade -> Merit grade #