Jensen's Device: Difference between revisions

Content added Content deleted
(→‎Haskell: Use `do` instead of operators, so it's not _completely_ inaccessible for outsiders)
Line 809: Line 809:
import Data.STRef
import Data.STRef


sum_ :: STRef s Double -> Double -> Double -> ST s Double -> ST s Double
sum_ :: STRef s Double -> Double -> Double
-> ST s Double -> ST s Double
sum_ ref_i lo hi term = sum <$> mapM ((>> term) . writeSTRef ref_i) [lo .. hi]
sum_ ref lo hi term =
do
vs <- forM [lo .. hi]
(\k -> do { writeSTRef ref k
; term } )
return $ sum vs


foo :: Double
foo :: Double
foo =
foo =
runST $
runST $
do i <- newSTRef undefined -- initial value doesn't matter
do ref <- newSTRef undefined
sum_ i 1 100 $ recip <$> readSTRef i
-- initial value doesn't matter
sum_ ref 1 100 $
do
k <- readSTRef ref
return $ recip k


main :: IO ()
main :: IO ()