我正在尝试编写自己的foldMap函数作为学习Haskell的例外
目前它看起来像这样
class Functor f => Foldable f where
fold :: Monoid m => f m -> m
foldMap :: Monoid m => (a -> m) -> f a -> m
foldMap g a = fold (<>) mempty (fmap g a)
Run Code Online (Sandbox Code Playgroud)
但是在编译时会出现以下错误
Could not deduce (Monoid ((f m -> m) -> fm -> m)) arising from use of 'fold'
from the context (Foldable f) bound by the class declaration for 'Foldable' at (file location)
or from (Monoid m) bound by …Run Code Online (Sandbox Code Playgroud) 我想在Haskell做一个纸牌游戏
我定义了以下数据类型
data Rank = R2 | R3 | R4 | R5 | R6 | R7 | R8 | R9 | R10 | J | Q | K | A
deriving (Bounded, Enum, Eq, Ord)
data Suit = S | H | D | C
deriving (Bounded, Enum, Eq, Ord, Show)
data Card = Card { rank :: Rank, suit :: Suit }
deriving (Eq, Ord)
type Deck = [Card]
Run Code Online (Sandbox Code Playgroud)
然后我试图为一整套牌定义一个常数:
fullDeck :: Deck
fullDeck = [
Card{R2,S}..........
Run Code Online (Sandbox Code Playgroud)
背后,对于在甲板上的每卡还有更多的卡
.当我尝试编译此我得到错误"输入R2解析错误" …
我正在尝试使用monads制作一个简单的"游戏"
我掷了六次硬币并计算了我看到的头数,然后我掷了一个骰子;
如果骰子上的眼睛数量大于或等于我计算的头数,那么我就赢了,否则我输了
我声明了以下类型
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)
Run Code Online (Sandbox Code Playgroud)
然后我继续定义
class Monad m => MonadGamble m where
toss :: m Coin
roll :: m Dice
Run Code Online (Sandbox Code Playgroud)
在我的脑海中,当调用折腾或滚动时,应提供骰子或硬币值,但事实并非如此
然后我尝试按如下方式编写游戏代码
game = do
i <- 0
x <- [toss, toss, toss, toss, toss, toss]
if x==H …Run Code Online (Sandbox Code Playgroud)