diff options
| author | Miguel <m.i@gmx.at> | 2019-03-17 18:29:29 +0100 |
|---|---|---|
| committer | Miguel <m.i@gmx.at> | 2019-03-17 18:29:29 +0100 |
| commit | a790eaa34b6f9ac233dd6c58e11ace9ba2b635f3 (patch) | |
| tree | 242e575e6f8b04e0afe08b9b9d35e283d5fba302 /snip/snip.hs | |
| parent | 4b192701b6c9ff1ff49405132e2580438b644d27 (diff) | |
added some snippet
Diffstat (limited to 'snip/snip.hs')
| -rw-r--r-- | snip/snip.hs | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/snip/snip.hs b/snip/snip.hs index 4b7b461..cf2db1f 100644 --- a/snip/snip.hs +++ b/snip/snip.hs @@ -1,8 +1,16 @@ import Control.Monad.Writer import Control.Monad.State +import Data.Tuple.Extra (dupe,first,second) +import System.Environment (getArgs) +import Control.Parallel.Strategies (parMap,rseq,rdeepseq) + +main = do + mainMonTra + mainParMap + -- monad transformers in action -main = print $ +mainMonTra = print $ runState ( runWriterT ( get >>= \a -> @@ -12,3 +20,10 @@ main = print $ tell [show a] ) ) 5 + +-- parallel Map arguments: sparks maps +mainParMap = do + (sparks:max:_) <- fmap (map read) getArgs + let ranges = uncurry zip . second tail . dupe $ [0,(max`div`sparks)..max] + let sums = parMap rdeepseq (\(a,b)->sum [a+1..b]) ranges + print $ show (sum sums::Integer) |
