【发布时间】:2017-02-25 01:36:15
【问题描述】:
我已经定义了一个Coin 数据类型:
data Coin = H | T
deriving (Bounded, Eq, Enum, Ord, Show)
鉴于以下框架,我现在必须编写一个 Random Coin 实例:
instance Random Coin where
randomR (l, h) g = undefined
random = undefined
显然,这个随机实例应该返回 H 或 T。我开始了解 Monad 的工作原理,但是,我对初始随机生成器感到困惑。我知道一个随机生成器返回一个(a, gen),但是我们从哪里得到初始生成器来创建第一个随机硬币?我目前有以下:
instance Random Coin where
randomR (l, h) g = case randomR(l, h) g of
(c, g') -> (c, g')
random = getStdRandom(randomR(minBound :: Coin, maxBound :: Coin))
我对@987654326@ 函数感到特别困惑,因为特定的表达式似乎返回类型 IO Coin。非常感谢任何能启发我的帮助!
【问题讨论】:
-
case foo of (x, y) -> (x, y)与case foo of anything -> anything相同,与foo相同。因此,您的实例中只剩下randomR (l, h) g = randomR (l, h) g。对我来说,这就像一个非常花哨的无限循环!