но ведь независимо от примитивов, язык не может гарантировать тотальность ио, потому что в общем случае ио нетотален. или я неправильно понимаю?
такая условная тотальность. Хаскель тоже условно типизированный. GHC гарантирует, что если ты напишешь a :: t, то значение a действительно будет принадлежать типу t, но только если значение вычислилось, и не было unsafeCoerce, и какой-нибудь FFI не проехался по памяти
Это очень спорный вопрос. Что-то типа "фундаментально" - да, может быть. Но практически, программировать на них неудобно. Кое-как, идрис приблизился, но ему ещё далековато по удобству до хаскеля.