imp-ppl-0.1.0.0: src/Imp/Examples/Basic.hs
{-# LANGUAGE QualifiedDo, RebindableSyntax #-}
-- | Simple coin-flip programs with no Knightian uncertainty.
module Imp.Examples.Basic
( fairCoin
, twoCoins
, biasedCoin
, coinOr
) where
import Imp
-- | Fair coin flip.
fairCoin :: Imp '[] Bool
fairCoin = flip 0.5
-- | Two independent coin flips.
twoCoins :: Imp '[] (Bool, Bool)
twoCoins = Imp.do
a <- flip 0.5
b <- flip 0.5
Imp.return (a, b)
-- | Biased coin.
biasedCoin :: Imp '[] Bool
biasedCoin = flip 0.7
-- | OR of two fair coins.
coinOr :: Imp '[] Bool
coinOr = Imp.do
a <- flip 0.5
b <- flip 0.5
Imp.return (a || b)