鉴于:
import System.Random
data Rarity = Common | Uncommon | Rare | Legendary
deriving (Show, Eq, Ord, Enum, Bounded)
Run Code Online (Sandbox Code Playgroud)
我想要实例Random,所以我开始使用类似的东西:
randomRarity :: (RandomGen g) => g -> (Rarity, g)
randomRarity g = case random g of
(r,g') | r < 0.50 -> (Common, g')
| r < 0.75 -> (Uncommon, g')
| r < 0.88 -> (Rare, g')
| otherwise -> (Legendary, g')
Run Code Online (Sandbox Code Playgroud)
但这失败了,因为即使它知道它需要Ord从所有比较中随机,它也无法分辨出我真正想要的是随机的Float.所以我想我需要键入返回值random g,但是我遇到了一个问题:
(random g :: (Float, ???))
由于它是一个元组,我将什么声明为第二类?我尝试了类似的东西(random …