gpt4 book ai didi

关于限制的 Haskell 类定义问题

转载 作者:行者123 更新时间:2023-12-03 14:58:52 26 4
gpt4 key购买 nike

class IndexSelect k (m :: k -> (* -> *) -> *) | m -> k where
type Restriction m (p :: k) :: Constraint
indexSelect :: Restriction m p => Sing (p :: k) -> Proxy m -> LocalDb f -> f (TableEntity (m p))

我是 Haskell 语言的新手。在我刚开始工作的公司的代码仓库中,我无法破译某些代码中的类定义。
这是在做什么?

最佳答案

这里发生了很多事情。我将首先向您推荐第 7.6 Class and Instance Declarations 部分, 7.7 Type Families , 和 7.8.4 Explicitly-kinded qualifications GHC 语言扩展文档。 (我绝不是任何这些方面的专家,并点击了您的问题,希望有人提供了进一步的启发。)

我们正在定义一个名为 IndexSelect 的多参数类型类。带参数km . (多参数类型类 7.6.1.1)

类的第二个参数m , 被赋予明确的种类限定:k -> (* -> *) -> *英语 m必须是一个接受 k 的函数和一个函数并返回一个值。 (7.8.4 显式量化)

该类具有功能依赖 | m -> k .在哪里选择m必须唯一确定 k给定这个函数的名字,暗示一个集合 m必须只有一种 key k这是合理的。 (7.6.2 功能依赖)

该类形成一个索引类型族type Restriction m (p :: k) :: Constraint .它出现在类定义中,因此它是关联的类型同义词。 (7.7.2.1.1 关联类型族声明)。它需要一些 mp必须是 k 类型并产生一个约束。

该类有一个列出的方法indexSelect有人可能会猜到它设法从集合中提取信息。不知道是什么Sing , LocalDbTableEntity我不能说更多。

关于关于限制的 Haskell 类定义问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54915639/

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