Как этого же можно добиться без отказа от типизации и перехода к строчным значениям?
Тогда в чем разница между throw и throwIO?
Нет, она позволит в ран-тайме добавлять в себя различные типы? А что делать, если они совпадают?
Означают ли завтипы, что информация о типах не будет полностью стираться при компиляции?
Т.е. если аргументом throw передать что-то, что может само исключение бросить, оно может быть вычислено до первого принта и на экран не выведется ничего?
А в чем разница между const и \a _ -> (# a #)?