繁体   English   中英

关于限制的Haskell类定义问题

[英]Haskell class definition question about restrictions

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类和实例声明7.7类型系列 ,以及7.8.4 GHC语言扩展文档的明确资格 (我绝不是任何一个问题的专家,并点击你的问题,希望有人提供进一步的启示。)

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

m的第二个参数给出了一个明确的类型限定: k -> (* -> *) -> * in English m必须是一个函数,它接受一个k和一个函数并返回一个值。 (7.8.4显性定量)

这个类有一个函数依赖| m -> k | m -> k m的选择必须唯一地确定k给定该函数的名称,这意味着集合m必须只有一种合理的密钥k (7.6.2功能依赖)

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

该类有一个列出的方法indexSelect ,可能猜测该方法可以从集合中提取信息。 不知道SingLocalDbTableEntity什么,我不能多说。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM