Ticket #5086: Space.hs

File Space.hs, 0.5 KB (added by j.waldmann, 2 years ago)
Line 
1import Control.Monad
2import Data.List
3import Control.Concurrent
4import GHC.Conc
5
6splits xs = zip ( inits xs ) ( tails xs )
7
8perms [] = return []
9perms (x:xs) = do
10    ys <- perms xs
11    (pre,post) <- splits ys
12    return $ pre ++ x:post
13
14main = void $ forM [ 1 :: Int .. ] $ \ e -> do
15    ch <- newChan
16    void $ forM [ 1 .. GHC.Conc.numCapabilities ] $ \ t -> 
17        writeChan ch $ length $ reverse $ perms $ take e  [ t .. ]
18    out <- forM [ 1 .. GHC.Conc.numCapabilities ] $ \ t -> readChan ch
19    print ( e, out )