Ticket #8603: DiscreteRandomVariableBugReport.hs

File DiscreteRandomVariableBugReport.hs, 682 bytes (added by person1729, 17 months ago)

Test case

Line 
1import Control.Monad
2import Data.Functor
3import Control.Monad.Trans
4import Control.Monad.Trans.State
5
6newtype RV a = RV { getPDF :: [(Rational,a)] } deriving (Show, Eq)
7
8instance Functor RV where
9  fmap f = RV . map (\(x,y) -> (x, f y)) . getPDF
10
11instance Monad RV where
12  return x = RV [(1,x)]
13  rv >>= f = RV $
14    do (p,a) <- getPDF rv
15       guard (p > 0)
16       (q,b) <- getPDF $ f a
17       guard (q > 0)
18       return (p*q, b)
19
20type RVState s a = StateT s RV a
21
22uniform :: [a] -> RV a
23uniform x = RV [(1/fromIntegral (length x), y) | y <- x]
24
25testRVState1 :: RVState s Bool
26testRVState1
27  = do prize <- lift uniform [1,2,3]
28       return False
29
30main :: IO ()
31main = return ()