In the concurrency library GHC.Conc there is a function called numCapabilities
. Its type is numCapabilities :: Int
and it actually returns some number you passed by the command line flag (e.g. 5
if the options are +RTS -N 5
).
However, getArgs
(type: IO [String]
) does essentially the same (it returns the unparsed non-runtime arguments) but isn't a pure function.
If the only excuse is that numCapabilities
is often needed in pure code, in what way aren't other command line options not needed in pure code?
Am I something missing or is either numCapabilities
a design flaw or am I allowed to write the following monster?
myGetArgs = unsafePerformIO getArgs