packages feed

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)