小编Lor*_*les的帖子

在Haskell中编写foldMap

我正在尝试编写自己的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 functor foldable

4
推荐指数
1
解决办法
3983
查看次数

解析我定义的数据类型的错误

我想在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解析错误" …

haskell types

0
推荐指数
1
解决办法
150
查看次数

硬币和骰子与单子

我正在尝试使用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)

monads haskell

0
推荐指数
1
解决办法
321
查看次数

标签 统计

haskell ×3

foldable ×1

functor ×1

monads ×1

types ×1