我得到以下内容:

data Card = Card Suit Rank
  deriving (Eq, Ord, Show)

type BidFunc
  = Card    -- ^ trump card
  -> [Card] -- ^ list of cards in the player's hand
  -> Int    -- ^ number of players
  -> [Int]  -- ^ bids so far
  -> Int    -- ^ the number of tricks the player intends to win

我需要在其中编写函数的地方

makeBid :: BidFunc
makeBid = (write here)

我遇到的问题是我无法理解所声明的函数类型BidFunc的语法。 我是Haskell的新手,所以如果有人可以对上述函数类型给我一个足够清晰的解释,我将不胜感激。

特别是为什么会有'='卡,然后是-> [Card]等? 我应该将参数传递给函数类型吗?

#1楼 票数:7 已采纳

makeBid :: BidFunc完全一样的makeBid :: Car -> [Card] -> Int -> [Int] -> Int ,所以你会在完全相同的方式定义函数:

makeBid :: BidFunc
-- makeBid :: Card -> [Card] -> Int -> [Int] -> Int
makeBid c cs n bs = ...

至于type定义的格式,仅此而已:格式。 海事组织,写成

type BidFunc = Card   -- ...
            -> [Card]  -- ...
            -> Int    -- ...
            -> [Int]  -- ...
            -> Int    -- ...

如果要对每个参数和返回值进行注释。 没有注释,它当然可以写在一行上:

type BidFunc = Card -> [Card] -> Int -> [Int] -> Int

通常, type <lhs> = <rhs>仅表示<lhs>是可以引用<rhs>指定的任何类型的名称。


至于为什么可能会觉得需要为不经常重复使用的东西定义类型别名的原因,我不能说。 除了makeBid ,它们是否还有其他具有相同类型的函数?

  ask by Maxxx translate from so

未解决问题?本站智能推荐:

3回复

了解Haskell中的类型

我正在尝试将函数h映射到素数列表。 两者都在下面给出: 但是,当我尝试map h primes ,出现以下错误: 等等... 函数f和素数似乎都能按预期工作,但我无法将f应用于素数中的数字??? 我在这里误会什么?
1回复

了解Haskell中的数据类型

我是haskell新蜜蜂。 我不能只是围绕着这里发生的事情 它给我错误 不能匹配预期类型Either String (NestedList a)' with actual type NestedList一个”在返回类型的呼叫的List' In the expression: List
1回复

了解Haskell中的Fix数据类型

在这篇关于Haskell中的Free Monads的文章中 ,我们给出了一个由以下定义的Toy数据类型: 修复定义如下: 这允许通过保留常见类型来嵌套Toy表达式: 我理解固定点如何适用于常规函数,但我没有看到这里的类型如何减少。 编译器遵循哪些步骤来评估表达式的类型?
2回复

了解Haskell中的函数定义和类型

我试图在Haskell中编写一个简单的工具作为学习练习,遇到了一些我无法弄清楚的东西。 这是一个简单的例子来说明它。 根据我的理解,这个例子应该在运行时编译并打印[1, 2] 。 但是,如果无法使用以下消息进行编译: 考虑到map的签名是(a -> b) -> [a] -
3回复

了解Haskell类型签名

我正在自学Haskell,我想知道以下类型的签名: 我应该如何解释(没有双关语意)? 一个半相似的结果也证明是令人费解的:
1回复

了解Haskell类型签名

我必须将Haskell类型签名转换成术语。 类型签名是: 正确的结果项是: 据我所知,这是我的问题所在g是一个返回返回c的函数的函数, c是返回一个返回b的函数d的函数, b是返回自己然后又返回自身然后返回c的函数。 如果我错了,请纠正我。 我不明白的是为什么g将(jx)作为第一个参数并将(hx)作
2回复

haskell:了解类型和功能

为了了解haskell的工作原理,我创建了以下语句。 我试图了解它们的类型; 有人可以让我知道我是否正确吗? 如果是正确的话,有人可以帮助我了解这些语句的类型/功能: even x = x 'mod' 1 == 1 chart xy = [y| x <- [1..x]]
2回复

了解Haskell类型[重复]

这个问题已经在这里有了答案: 了解Haskell类型签名 3个答案 我需要了解类型如何工作并可以解释。 例如,如果我们使用map函数,则我们有map ::(a-> b)-> [a]-> [b] 好吧,我该怎么解释?