Я полный новичок, который в настоящее время пытается научиться Haskell с помощью Узнать вас о Haskell для Great Good ". Я дошел до раздел, объясняющий, как работать с аргументами командной строки, и что-то меня раздражает.
Из моего понимания (и определение haskell.org), действия предназначены для инкапсуляции побочных эффектов. Аргументы командной строки являются неизменяемыми входами для данного экземпляра программы, тогда в чем смысл getProgName :: IO String
, а не getProgName :: String
? Иными словами, какой смысл запретить чистую функцию вызывать getProgName
?
Обновление
У меня были некоторые отличные ответы на этот вопрос. Я принимаю Дон Стюарт как самый простой и лаконичный, но Конал (с его ассоциированным сообщение в блоге), безусловно, стоит прочитать.