我在以下位置给出了
: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的新手,所以如果有人可以对上述函数类型给我一个足够清晰的解释,我将不胜感激。
尤其是为什么会有'='卡,然后是-> [卡]等?我应该将参数传递给函数类型吗?
答案 0 :(得分: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
旁边是否还有其他具有相同类型的函数?