haskell - 难以理解 Haskell 中的类型
问题描述
我在哪里得到以下信息:
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] 等?我应该将参数传递给函数类型吗?
解决方案
makeBid :: BidFunc
与完全相同,makeBid :: Car -> [Card] -> Int -> [Int] -> Int
因此您将以完全相同的方式定义函数:
makeBid :: BidFunc
-- makeBid :: Card -> [Card] -> Int -> [Int] -> Int
makeBid c cs n bs = ...
至于type
定义的格式化,无非就是:格式化。IMO,写成这样会更清楚一点
type BidFunc = Card -- ...
-> [Card] -- ...
-> Int -- ...
-> [Int] -- ...
-> Int -- ...
如果您想评论每个参数和返回值。不加注释当然可以写成一行:
type BidFunc = Card -> [Card] -> Int -> [Int] -> Int
一般来说,type <lhs> = <rhs>
just remeans<lhs>
是一个可以引用任何类型<rhs>
指定的名称。
至于为什么有人会觉得有必要为不经常重用的东西定义一个类型别名,我不能说。makeBid
除了具有相同类型的任何其他功能之外,它们是否还有其他功能?
推荐阅读
- javascript - 设置输入字段的值 bootstrap 4.5
- php - 在 n 个数之后将元素放在新的引导行中 - foreach 循环
- php - .htaccess 更改后本地 symfony 5 无法正常工作
- deep-learning - DenseNet,张量的大小必须匹配
- android - 无法解析配置“:classpath”的所有工件。(在 android studio 中构建问题)
- typescript - 为什么`SomeObject[SomeEnum]`的类型从来不在这里
- flutter - Flutter:在等待 Google 登录完成时显示加载小部件
- r - 下载 WorldPop 人口计数栅格
- css - CSS 表格 - 用细线分隔行
- android - 单击“现在不”或“取消”后,应用内审核提示不可见