anchor.diff:    type 'a Distribution = 'a Outcome seq
     
     // P(A AND B) = P(A | B) * P(B)
  -  let bindD (dist:'a Distribution) (f: 'a -> 'b Distribution) =
  +  let bind (f: 'a -> 'b Distribution) (dist:'a Distribution) =
         dist 
             |> Seq.map (fun p1 -> 
                     f p1.Value
  
positive.code:         |> Seq.map (fun o -> o.Probability)
          |> Seq.sum
    
    let certainly = returnD
    let impossible<'a> :'a Distribution = toUniformDistribution []
    
    let fairDice sides = toUniformDistribution [1..sides]
  
negative.code:                               p1.Probability * p2.Probability}))
            |> Seq.concat : 'b Distribution
    
    let inline (>>=) dist f = bind f dist
    
    let returnM (value:'a) =   
        Seq.singleton { Value = value ; Probability = 1N/1N }
          : 'a Distribution
    
    type DistributionMonadBuilder() =
        member this.Bind (r, f) = bind f r
        member this.Return x = returnM x
        member this.ReturnFrom x = x
    
    let distribution = DistributionMonadBuilder()
  