imp-ppl-0.1.0.0: src/Imp/Examples/Iteration.hs
{-# LANGUAGE QualifiedDo, RebindableSyntax #-}
-- | Random walks with imprecise step probability.
module Imp.Examples.Iteration
( walk1
, walk2
, walk3
, walk3Asym
) where
import Imp
-- | 1-step walk.
walk1 :: Imp '["s1"] Int
walk1 = Imp.do
steps <- intervalMap @'["s1"] 0.3 0.7
Imp.return $ length (filter id steps)
-- | 2-step walk.
walk2 :: Imp '["s1", "s2"] Int
walk2 = Imp.do
steps <- intervalMap @'["s1", "s2"] 0.3 0.7
Imp.return $ length (filter id steps)
-- | 3-step walk.
walk3 :: Imp '["s1", "s2", "s3"] Int
walk3 = Imp.do
steps <- intervalMap @'["s1", "s2", "s3"] 0.3 0.7
Imp.return $ length (filter id steps)
-- | Asymmetric intervals break the swap-symmetry.
walk3Asym :: Imp '["s1", "s2", "s3"] Int
walk3Asym = Imp.do
s1 <- interval @"s1" 0.1 0.9
s2 <- interval @"s2" 0.3 0.7
s3 <- interval @"s3" 0.45 0.55
Imp.return $ length (filter id [s1, s2, s3])