Является ли монадическая конструкция ввода-вывода в Haskell просто конвенцией или есть причина для ее реализации?
Не могли бы вы просто FFI в libc.so вместо этого сделать IO и пропустить IO Monad?
Будет ли это работать в любом случае, или результат является недетерминированным из-за того, что Haskell оценивает ленивый или что-то еще, например, GHC является сопоставлением шаблонов для IO Monad, а затем обрабатывает его особым образом или что-то еще.
Какова настоящая причина? В итоге вы оказываетесь в побочном эффекте. Так почему бы не сделать это простым способом?