-- Hamming numbers computed by process network -- argument = number of Hamming numbers to be computed module Main where import System.Environment import Control.Seq import Control.Parallel (pseq) import Control.Parallel.Eden usage = "I need 1 parameter! argument = number of Hamming numbers to be computed" main :: IO () main = do args <- getArgs if length args < 1 then putStrLn usage else do let len = args !! 0 putStrLn $ show $ take ((read len)::Int) hamming --($#) :: (Trans a, Trans b) => (a->b) -> a -> b --($#) = ( # ) . process hamming :: [Int] hamming = 1: sm ((uncurry sm) $# (map (*2) $# hamming, map (*3) $# hamming)) (map (*5) $# hamming) sm :: [Int] -> [Int] -> [Int] sm [] ys = ys sm xs [] = xs sm (x:xs) (y:ys) | x < y = x : sm xs (y:ys) | x == y = x : sm xs ys | otherwise = y : sm (x:xs) ys