Насколько я могу судить, основной ответ заключается в том, что интерактивный верхний уровень Hugs по сути является синтаксическим анализатором выражений, а определения функций / данных не являются выражениями. Ваш пример действительно сработал бы, если бы вы сделали это выражением и написали let fac n = if n == 0 then 1 else n * fac (n-1) in fac 19
. Добавление поддержки для этого было бы довольно большим усилием, и, по-видимому, разработчики Хагса считали, что этого достаточно, чтобы требовать определения функций / данных в файлах.