Я делаю упражнение в программировании на Хаскеле из Первых принципов.Он просит меня сгенерировать равные вероятности, и 1/3, 2/3 вероятности для каждого из:
data Fool =
Fulse
| Frue
deriving (Eq, Show)
И мой ответ
module Random where
-- import Test.Hspec
import Test.QuickCheck
data Fool =
Fulse
| Frue
deriving (Eq, Show)
genFool :: Gen Fool
genFool = choose (Fulse, Frue)
genFool' :: Gen Fool
genFool' = do
frequency [(2, return Fulse)
,(1, return Frue)]
, но genFool
неверен.Сообщение об ошибке:
../chap14/random.hs:13:11: error:
• No instance for (System.Random.Random Fool)
arising from a use of ‘choose’
• In the expression: choose (Fulse, Frue)
In an equation for ‘genFool’: genFool = choose (Fulse, Frue)
|
13 | genFool = choose (Fulse, Frue)
| ^^^^^^^^^^^^^^^^^^^^
Ранее у меня был такой код:
genBool :: Gen Bool
genBool = choose (False, True)
, который работает правильно.Я думаю, что может быть несколько предопределенных instance
из System.Random.Random Fool
, чтобы заставить choose
работать.
Что я должен сделать, чтобы моя версия genFool
компилировалась?
ИКстати, почему return Fulse
во втором genFool'
типа Gen Fool
?