{-# LANGUAGE TemplateHaskell #-} module Config where import Data.Label import System.Console.GetOpt data Config = Config { _configSteps :: Int , _configChunkSize :: Int , _configCount :: Bool , _configNoSeq :: Bool } deriving Show $(mkLabels [''Config]) defaults :: Config defaults = Config { _configSteps = 10 , _configChunkSize = 12000000 , _configCount = False , _configNoSeq = True } options :: [OptDescr (Config -> Config)] options = [ Option [] ["steps"] (ReqArg (set configSteps . read) "INT") "number of steps to perform" , Option [] ["chunk-size"] (ReqArg (set configChunkSize . read) "INT") "size of chunks to be processed" , Option [] ["count"] (NoArg (set configCount True)) "count number of pages in the links file" , Option [] ["noseq"] (NoArg (set configNoSeq True)) "do not use Accelerate sequencing" ] header :: [String] header = [ "accelerate-pagerank (c) [2011..2013] The Accelerate Team" , "" , "Usage: accelerate-pagerank [OPTIONS] [+RTS -M]" , "" , " NOTE: The -M flag sets the Haskell heap size. If high performance is" , " desired, then this value, as well as the chunk size, will need to" , " be adjusted. The idea being to maximise the chunk size without" , " running out of device memory. With experimentation, you can arrive" , " at a heap size that will force garbage collection before device" , " memory runs out." , "" ] footer :: [String] footer = [ "" ]