我今天写了这个:
data Door = A | B | C
deriving (Eq,Bounded,Enum)
instance Random Door where
randomR (lo,hi) g = (toEnum i, g')
where (i,g') = randomR (fromEnum lo, fromEnum hi) g
random = randomR (minBound,maxBound)
Run Code Online (Sandbox Code Playgroud)
我认为这对于任何枚举都是大致可复制的.我尝试将Random放入derinding子句中,但是失败了.
然后我搜索了网络,发现了这个:
请为随机#21提供(Enum a,Bounded a)的实例
一些引用似乎回答了我的问题,除了我不太了解它们:
你有什么实例,实例(Bounded a,Enum a)=>随机a在哪里......?不可能有这样的实例,因为它会与其他所有实例重叠.
这将阻止任何用户派生的实例....
为什么不能通过derinding子句或至少使用默认实现来实现自动化.
为什么这不起作用?
instance (Bounded a, Enum a) => Random a where
randomR (lo,hi) g = (toEnum i, g')
where (i,g') = randomR (fromEnum lo, fromEnum hi) g
random = randomR (minBound,maxBound)
Run Code Online (Sandbox Code Playgroud)