imp-ppl-0.1.0.0: src/Imp/Examples/TwoChild.hs
{-# LANGUAGE QualifiedDo, RebindableSyntax #-}
-- | The two-child problem.
module Imp.Examples.TwoChild
( twoChild
) where
import Imp
-- | Imprecise variant of the classical two-child problem.
twoChild :: Imp '["alien"] Bool
twoChild = Imp.do
humanBoy <- flip 0.5
alienBoy <- knight @"alien"
observe (humanBoy || alienBoy)
Imp.return (humanBoy && alienBoy)