b where foo :: a -> b instance (not?)Foo a => Bar a b -6ren">
gpt4 book ai didi

Haskell "not"类型约束

转载 作者:行者123 更新时间:2023-12-04 10:28:14 24 4
gpt4 key购买 nike

我正在尝试以归纳方式定义一对类实例。那是:

class Foo a b | a -> b where
foo :: a -> b

instance (not?)Foo a => Bar a b
foo x = ...

instance Foo a => Bar a b
foo x = ...

第一个实例确定基本操作,第二个实例递归调用 foo。有没有办法做到这一点?一个很好的例子是展平一个列表,在第一种情况下它是标识函数,在第二种情况下它是 concat 的递归应用。

最佳答案

没有办法直接这样做,原因很简单——实例选择只查看“头部”,即 => 之后的部分.您没有在上下文中添加任何内容——=> 之前的部分--可以影响选择哪个实例。

对于简单的情况,您通常可以完全避免该问题,例如“基本情况”类型的数量有限。一个常见的例子是类型级别的列表,在这里你会有一个 Cons 的递归案例。和 Nil 的基本情况就是这样。

在一般情况下,您通常需要某种“条件测试”类型类,该类根据是否满足某些条件来选择类型,然后将实际实现交给一个“助手”类,该类将条件的结果值作为一个参数并使用它来选择一个实例。

关于Haskell "not"类型约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9550903/

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