gpt4 book ai didi

haskell - MultiParamTypeClasses 的歧义问题

转载 作者:行者123 更新时间:2023-12-05 01:00:51 25 4
gpt4 key购买 nike

我有一个定义如下的类型类:

class (Eq a, Show a, Typeable a) => Condition v a where

(和一些方法)

我想编写一个函数,它接受两个具有相同“v”的条件。
analyze :: (Condition v a, Condition v b) => a -> b -> Bool

(为简单起见,返回类型为 Bool)

但是当我尝试编译它时,我得到
Could not deduce (Condition v0 b)
arising from the ambiguity check for ‘analyze’
from the context (Condition v a, Condition v b)

所以它清除不是推断我想说的,而是引入了另一个类型变量 v0。

你能解释一下我写的类型签名的公式有什么问题以及如何解决它吗? RankNTypes 能解决这个问题吗?

最佳答案

Condition v a两者都需要 va待解决。自 v =>的右手边没有提到在 analyze ,编译器无法选择正确的 v .它与具有 foo :: Show a => () 相同或 foo :: Condition a x => x -> Bool .您如何选择 a ?不知道Condition的解释是什么是,但也可能是 v应由 a 确定- 如果是这种情况,那么你可以写

class Condition v a | a -> v

这称为函数依赖。

关于haskell - MultiParamTypeClasses 的歧义问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28887297/

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