作为一项任务,我需要在Haskell中使用单子并创建一个赌博游戏,该游戏有一个简单的规则:抛6个硬币,计算正面朝上的硬币数,掷骰子,如果其结果等于或大于计算出的正面朝上的硬币数,则获胜,否则失败。我被给予以下定义赌博单子的“框架”:
data Coin = H | T
deriving (Bounded, Eq, Enum, Ord, Show)
data Dice = D1 | D2 | D3 | D4 | D5 | D6
deriving (Bounded, Eq, Enum, Ord, Show)
data Outcome = Win | Lose
deriving (Eq, Ord, Show)
class Monad m => MonadGamble m where
toss :: m Coin
roll :: m Dice
game :: MonadGamble m => m Outcome
game = undefined
然而,我对单子仍然很陌生,不知道如何使用它们。例如:游戏定义应该实现上述我解释过的游戏,但是我应该如何使用这个“赌博单子”,例如执行一个或多个投掷/摇动并获得结果值,以便我可以使用/处理它们?
此外,据我了解,单子总是有两个默认函数:返回和(>>=),但是我不明白这如何适用于MonadGable单子?
如果有人能帮助我,将不胜感激!
最好的问候, Skyfe。
MonadGamble
的情况下编写整个游戏的逻辑,然后稍后编写instance MonadGamble some_existing_monad where ...
以获得它运行的实际行为。 - bheklilrMonadGamble
是一组类型,每个类型都具有>>=
和return
操作,以及MonadGamble
操作toss
和roll
。 - Jonathan Cast