首页 > 解决方案 > 难以理解 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] 等?我应该将参数传递给函数类型吗?

标签: haskell

解决方案


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除了具有相同类型的任何其他功能之外,它们是否还有其他功能?


推荐阅读