import System.Random
nofSample = 10000
calcPi :: IO Double
calcPi = do
samples <- sequence $ replicate nofSample ((,) <$> uniform01 <*> uniform01)
pure $ 4 * sum [1 | (x, y) <- samples, x^2 + y^2 <= 1] / nofSample
where
uniform01 = randomRIO (0, 1)
calcPi >>= print