module Main where
import Control.Monad.MonteCarlo
import Data.Summary.Bool
import System.Random.TF
----------------------------------------------------------------
-- Example: Integrate sin(x) from 0 to pi
----------------
bounds :: ((Double,Double),(Double,Double))
bounds = ((0,pi),(0,1))
isUnderCurve :: RandomGen g => (Double -> Double) -> MonteCarlo g Bool
isUnderCurve f = do
x <- randomR (fst bounds)
y <- randomR (snd bounds)
return $ y <= f x
noRuns :: Int
noRuns = 1000000
main :: IO ()
main = do
g <- newTFGen
let s = experimentP (isUnderCurve sin) noRuns 200000 g :: BoolSumm
let ((_,r),(_,u)) = bounds
print $ sampleMean s * r * u