Я пытаюсь использовать SmallCheck для проверки программы Haskell, но я не могу понять, как использовать библиотеку для тестирования собственных типы данных. По-видимому, мне нужно использовать Test.SmallCheck.Series. Тем не менее, я считаю, что документация очень запутанна. Меня интересуют как решения поваренной книги, так и понятное объяснение логической (монадической?) Структуры. Вот некоторые вопросы, которые у меня есть (все связанные):
-
Если у меня есть тип данных
data Person = SnowWhite | Dwarf Integer
, как объяснитьsmallCheck
, что допустимые значенияDwarf 1
-Dwarf 7
(илиSnowWhite
)? Что делать, если у меня сложная структура данныхFairyTale
и конструкторmakeTale :: [Person] -> FairyTale
, и я хочу, чтобыsmallCheck
сделал FairyTale-s из списков Person-s с помощью конструктора?Мне удалось сделать
quickCheck
работать так, чтобы это не загрязняло мои руки, используя разумные приложенияControl.Monad.liftM
для таких функций, какmakeTale
. Я не мог найти способ сделать это с помощьюsmallCheck
(пожалуйста, объясните мне это!). -
Какова связь между типами
Serial
,Series
и т.д.? -
(необязательно) Какова точка
coSeries
? Как использовать типPositive
изSmallCheck.Series
? -
(необязательно) Любое разъяснение того, что является логикой того, что должно быть монадическим выражением, и что является просто регулярной функцией, в контексте smallCheck, будет оценено.
Если там есть интро/учебник по использованию smallCheck
, я буду благодарен за ссылку. Большое вам спасибо!
ОБНОВЛЕНИЕ: Я должен добавить, что самая полезная и читаемая документация, которую я нашел для smallCheck
, этот документ (PDF). На первый взгляд я не мог найти ответ на мои вопросы; это скорее убедительная реклама, чем учебник.
ОБНОВЛЕНИЕ 2: Я переместил свой вопрос о странном Identity
, который отображается в типе Test.SmallCheck.list
и других местах в отдельном вопросе.