繁体   English   中英

了解Haskell中的类型

Trouble understanding types in Haskell

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我得到以下内容:

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 个回复

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 ,它们是否还有其他具有相同类型的函数?

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

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

2 haskell:了解类型和功能

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

2014-03-26 01:07:14 2 124   haskell
3 了解Haskell类型[重复]

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

2014-04-27 21:33:17 2 76   haskell
4 了解Haskell的类型系统

我有三个功能 这是我对每个函数的类型(类型签名?)的了解 当我将一个整数数组传递给removeNonUppercase或一个字符串传递给boombangs时,Haskell应该给我一个错误。 它也可以,但是当我在任何地方都没有指定类型时,怎么知道这是错误的。 同样,为什么 ...

2014-04-14 13:23:06 3 214   haskell
5 了解Haskell中的箭头

我一直试图控制箭头,因为它们是大多数FRP实施的基础。 我想我理解了它的基本思想 - 它们与monad相关,但是在每个绑定操作符中存储静态信息,因此您可以浏览一系列箭头并查看静态信息,而无需评估整个箭头。 但是,在我们开始讨论第一,第二和交换时,我迷路了。 2元组与箭头有什么关系? ...

6 了解Haskell中的列表

请原谅我简单的头脑,但是我很难理解Haskell,尤其是清单。 我尝试编写一个函数以返回字符串(不包含导入模块)的指定长度n的所有子字符串(每次从原始字符串的长度-1开始调用该函数时,该子字符串将减少一个)。 我写了下面的代码 无论多么有缺陷,我都不会期望代码逻辑或健壮性方面的帮助。 ...

7 了解Haskell中的参数

我是Haskell的新手,正在尝试调用以下函数: http : //www.haskell.org/haskellwiki/Functional_differentiation 我无法理解该方法的参数以及hfx对应的内容。 据我了解: h是分数 f是一个接受小数并返回小 ...

2014-04-24 07:48:26 4 91   haskell
8 了解Haskell中的分割线功能

以下是我试图理解的代码段: 我无法确定的是将在“ pre:”中为“ pre”分配什么值。 如果我是正确的,则使用“:”附加前缀,因此“ pre”应该是前缀,但值是多少? ...

2018-05-01 16:52:30 1 69   haskell
9 了解 Haskell 中的纯函数和副作用 - putStrLn

最近,我开始学习 Haskell,因为我想拓宽我对函数式编程的知识,我必须说到目前为止我真的很喜欢它。 我目前使用的资源是 Pluralsight 上的课程“Haskell Fundamentals Part 1”。 不幸的是,我在理解讲师关于以下代码的一段特别引述时遇到了一些困难,希望你们能对这个 ...

2019-11-25 15:43:24 4 348   haskell
10 帮助了解Haskell中的MVar示例

我正在尝试了解GHC最新文档中的MVar示例- 我了解大部分程序,但有两个问题- 像putSkipChan这样的操作是原子的吗? 通过先执行takeMVar ,似乎可以避免对putMVar的阻塞。 但是,如果在takeMVar但在putMVar之前还有其他调用putMVar ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM