gpt4 book ai didi

haskell - 在Servant库中解密DataKind类型提升

转载 作者:行者123 更新时间:2023-12-04 13:22:25 26 4
gpt4 key购买 nike

我正在尝试为tutorial库(一种类型级别的Web DSL)使用servant。该库广泛使用了 DataKind 语言扩展。

在该教程的开头,我们发现定义了Web服务端点的以下行:

type UserAPI = "users" :> QueryParam "sortby" SortBy :> Get '[JSON] [User]

我不明白在类型签名中包含字符串和数组的含义。我也不清楚 '前面的勾号( '[JSON])是什么意思。

因此,我的问题归结为字符串和数组的类型/类型是什么,当将 later转换为WAI端点时如何解释?

附带说明一下,在描述 Nat时一贯使用 VectDataKinds给我们提供了一组令人沮丧的示例,供您尝试理解这些内容时使用。我想我已经在不同地方至少阅读了十二遍该示例,但我仍然不觉得自己了解发生了什么。

最佳答案

启用 DataKinds 后,您将获得基于常规数据类型定义自动创建的新类型:

  • 如果你有 data A = B T | C U ,你现在得到一个新类型 A 和新类型 'B :: T -> A'C :: U -> A ,其中 TU 是类似提升的 TU 类型
  • 的新类型
  • 如果没有歧义,可以为B等写'B
  • 类型级别的字符串都共享同一种 Symbol ,所以你有例如"foo" :: Symbol"bar" :: Symbol 作为有效类型。

  • 在您的示例中, "users""sortby" 都是 Symbol 种类的类型, JSON* 种类(定义 here )的(老式)类型,而 '[JSON][*] 种类的类型,即它是单例类型级列表(它等同于 JSON ': '[],就像 [x] 通常等同于 x:[] 一样)。
    [User] 类型是 kind * 处的常规类型;它只是 User 列表的类型。它不是单例类型级别的列表。

    关于haskell - 在Servant库中解密DataKind类型提升,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37016836/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com