Testable
- это класс типа - по сути, абстракция над вещами, которую можно превратить в автоматизированный тест. Класс типа имеет несколько экземпляров, один из которых Bool
:
Testable Bool
Однако это не тот тип prop_rev_involutive
. Другой экземпляр Testable
:
(Arbitrary a, Show a, Testable prop) => Testable (a -> prop)
Это объявляет, что для любого a
, который является экземпляром как Arbitrary
, так и Show
, функция от a
до prop
сама является Testable
. Мы уже установили, что Bool
является экземпляром Testable
, поэтому теперь вам нужно выяснить, является ли [a]
экземпляром Arbitrary
и Show
.
Класс типа Arbitrary
имеет множество экземпляров, один из которых:
Arbitrary a => Arbitrary [a]
Это заявляет, что если a
является экземпляром Arbitrary
, то [a]
тоже. Итак, a
это Arbitrary
экземпляр? Это зависит от того, с каким конкретным типом вы действительно работаете quickCheck
. В некоторых средах Haskell по умолчанию используются определенные типы (например, Int
, который является экземпляром Arbitrary
).
Вам нужно будет провести те же рассуждения для класса типа Show
.
Я не думаю, что любая неограниченная функция [a] -> Bool
является Testable
экземпляром, но что-то вроде (Arbitrary a, Show a) => [a] -> Bool
есть. Примеры включают [Int] -> Bool
и [Char] -> Bool
. Это потому, что Bool
- это Testable
, а Int
и Char
- это экземпляры Arbitrary
и Show
.
person
Mark Seemann
schedule
04.03.2020
Testable
. Также не забудьте подумать о типе по умолчанию. - person Joseph Sible-Reinstate Monica   schedule 04.03.2020