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 |
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 |
do ref <- newSTRef undefined |
||
-- initial value doesn't matter |
|||
sum_ ref 1 100 $ |
|||
do |
|||
k <- readSTRef ref |
|||
return $ recip k |
|||
main :: IO () |
main :: IO () |