理解Haskell类型级别文字

Ana*_*Ana 6 haskell types infix-operator

查看Haskell Servant包,有一个将Web服务API定义为的初始示例:

             -- GET /date
type MyAPI = "date" :> Get '[JSON] Date
             -- GET /time/:tz
        :<|> "time" :> Capture "tz" Timezone :> Get '[JSON] Time
Run Code Online (Sandbox Code Playgroud)

我无法理解这意味着什么,并希望得到以下解释:

  1. :>并且:<|>是中缀构造函数.此类型声明是否表示它们是在此处定义的还是在此处使用?或者可能:>在这里定义但:<|>在其他地方定义?或者是其他东西?不知道如何阅读此类型.

  2. 什么是'[JSON]?这是某种类型级别的文字列表吗?报价是做什么的?

dfe*_*uer 5

这里使用(中缀)构造函数,它们必须在别处data或newtype声明中定义.type声明不会生成任何类型的构造函数.

'[JSON]确实是一个类型级别列表,相当于JSON ': '[].单引号表示数据构造函数正被提升为类型构造函数.我不确定它具有什么深刻的意义,但至少它避免了由于数据构造函数和类型构造函数可以共享名称而产生的混淆.

  • 当使用`DataKinds`扩展时,将自动定义所有可升级数据类型的@Ana类型级版本.[详见此处.](https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/promotion.html) (2认同)