А про WinHugs что-нибудь можете сказать? У него есть более-менее дружественный хелп, но текст задачи он не жрет.
Что бы Winhugs принял эту задачу, надо в начале файла после секции импорта вставить строку
default(Int)
то есть начинаться этот файл должен так:
import Data.List (lookup,nub)
import Data.Maybe (fromMaybe,catMaybes)
default(Int)
Функция objectAt принимает на вход целое число типа Int, а по умолчанию целочисленные константы в выражениях принимают значение Integer, если у транслятора нет подсказок, что достаточно типа Int.
В данном случае в функции
-- один объект всегда следует за другим
before obj obj' = r_any [
objectAt n obj <&> objectAt (n + 1) obj' | n <- [1..size - 1] ]
такой информации нет, и HUGS решает, что n и 1 в выражении objectAt (n + 1) obj' | n <- [1..size - 1] имеют тип Integer.
Этому выводу способствует неуказанный тип константы size, который принимается равным Integer.
GHC же более умный, учитывает тип функции objectAt и правильно обрабатывает такой случай.
Хотя по идее он тоже должен был ругнуться на это место.
Ещё WinHUGS решает эту задачу заметно медленнее, чем GHCi.