Генерация выбора на пользовательский тип данных с 2 вариантами - PullRequest
0 голосов
/ 24 ноября 2018

Я пытаюсь достичь чего-то очень простого.У меня есть этот тип данных:

import Test.QuickCheck
import System.Random
data Letter = G | B deriving(Show, Eq, Bounded)

arbitraryLetter :: Gen Letter
arbitraryLetter = choose (G,B)

Я компилирую и получаю эту ошибку

    • No instance for (Random Letter) arising from a use of ‘choose’
    • In the expression: choose (G, B)
      In an equation for ‘arbitraryLetter’:
      arbitraryLetter = choose (G, B)

Почему это не работает?Я хочу использовать QuickCheck для этого типа данных.

1 Ответ

0 голосов
/ 24 ноября 2018

choose имеет тип Random a => (a, a) -> Gen a, поэтому для choose (G, B) требуется экземпляр Random для вашего типа Letter.Если вы хотите создать генератор из набора значений, вы можете использовать elements вместо:

arbitraryLetter :: Gen Letter
arbitraryLetter = elements [G, B]
...