在haskell中使用forall量词进行谓词?

Posted

技术标签:

【中文标题】在haskell中使用forall量词进行谓词?【英文标题】:Predicate with forall quantifier in haskell? 【发布时间】:2013-01-09 14:48:41 【问题描述】:

我想编写一个接受类型值的函数,它具有多参数类型类的实例以及 every 类型。像这样的东西(test 函数的签名是非法的):

class Test a b

test :: forall a. (forall b. Test a b) => a -> a

有没有办法表达这种限制?

【问题讨论】:

不,没有。但也许你可以解决它;你能给我们一个你想要达到的目标的小例子吗?也许你可以只使用一个单参数类型类,它的方法可以普遍量化现在你的类的第二个参数是什么? 【参考方案1】:

根据您要达到的目标,可能会有更好的解决方案。

但您的要求也是可能的,使用 constraints 包。

-# LANGUAGE FlexibleContexts, ConstraintKinds, MultiParamTypeClasses #-

import Data.Constraint.Forall

class Test a b

test :: Forall (Test a) => a -> a
test = undefined

【讨论】:

以上是关于在haskell中使用forall量词进行谓词?的主要内容,如果未能解决你的问题,请参考以下文章

Scala中的Haskell“forall”翻译

CodeQL练习1

翻译/编码 Haskell 的 `data Obj = forall a. (显示 a)=> Scala 中的 Obj a`

谓词逻辑

Idris 中的复杂量词?

一阶逻辑基本概念