В библиотеке concurrency GHC.Conc есть функция numCapabilities. Его тип numCapabilities :: Int, и он фактически возвращает некоторое число, которое вы передали с помощью флага командной строки (например, 5, если параметры +RTS -N 5).
Однако getArgs (тип: IO [String]) делает практически то же самое (он возвращает непараметрированные аргументы без запуска), но не является чистой функцией.
Если единственным оправданием является то, что numCapabilities часто требуется в чистом коде, каким образом не нужны другие параметры командной строки в чистом коде?
Мне что-то не хватает или это numCapabilities недостаток дизайна, или мне разрешено писать следующего монстра?
myGetArgs = unsafePerformIO getArgs