summaryrefslogtreecommitdiff
path: root/snip
diff options
context:
space:
mode:
authorMiguel <m.i@gmx.at>2019-03-17 18:29:29 +0100
committerMiguel <m.i@gmx.at>2019-03-17 18:29:29 +0100
commita790eaa34b6f9ac233dd6c58e11ace9ba2b635f3 (patch)
tree242e575e6f8b04e0afe08b9b9d35e283d5fba302 /snip
parent4b192701b6c9ff1ff49405132e2580438b644d27 (diff)
added some snippet
Diffstat (limited to 'snip')
-rw-r--r--snip/snip.hs17
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)