Когда вы запускаете тест QuickCheck, QuickCheck должен знать, как генерировать данные.Здесь вы сказали только то, что ваш код должен работать с произвольным типом класса Ord
, которого недостаточно для начала тестирования.Отсюда ошибка с классами неоднозначных типов.
Если вам просто нужен произвольный экземпляр Ord
, как показано здесь, тогда что-то вроде Int
будет хорошим выбором для вашего тестирования.Это простой тип с линейным порядком.Поэтому попробуйте установить тип Int
в main
, например:
quickCheck (prop_equals_elem :: Int -> [Int] -> Bool)
Что касается того, почему он работает в GHCi, ответ по умолчанию.По умолчанию GHCi по умолчанию использует переменные типа ()
, чтобы избежать ложных ошибок в ситуациях, когда вы действительно не заботитесь о значении.На самом деле это ужасный выбор: вы не протестируете ничего интересного, просто протестировав тип ()
!Опять же, явная сигнатура типа лучше.