gpt4 book ai didi

Haskell 独立决定为我的数据类型推断 Bifunctor?

转载 作者:行者123 更新时间:2023-12-02 00:53:27 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Overlapping instances in Haskell when I'd expect it not to overlap due to constraints

(2 个回答)



Data.Vector.Binary overlaps Binary [a] instance

(1 个回答)



Functor supertype has conflicting instances

(1 个回答)


2年前关闭。




出于某种原因,GHC 似乎决定我的数据类型(带有两个类型参数)无缘无故地实例化 Bifunctor。

最有趣的是,这只是用来告诉我对于这种数据类型有 Functor 的重叠实例,因为我为任何 Bifunctor 提供了 Functor 的实例化(以及针对数据类型的特定实例)。但是,如果我尝试对其进行 bimap,它会告诉我没有 Bifunctor 的实例。

{-# LANGUAGE FlexibleInstances #-}
module BifunctorError where

import Data.Bifunctor

instance Bifunctor f => Functor (f t) where
fmap = bimap id

data Provenance p t = Provenance p t

-- Uncomment and try to compile: Overlapping instances ???
--instance Functor (Provenance p) where
-- fmap f (Provenance p x) = Provenance p (f x)

我希望,因为我没有提供任何东西来表明 Provenance 实例化 Bifunctor,它不会,所以从 Bifunctor 派生的 Functor 实例应该是无关紧要的。这是 FlexibleInstances 的错误吗?

最佳答案

在寻找匹配的类型类实例时,GHC 只看头部,而不是条件。它作为辅助步骤匹配条件。所以当 GHC 正在寻找一个 Functor例如,它看到的只是

instance (Don't care) => Functor (f t) where
instance (Don't care) => Functor (Provenance p) where

这两个实例都匹配得很好。 (Don't care) bit 直到后来才开始发挥作用。所以你有一些重叠的实例,这是一个问题。

您可以在 this question 中了解更多相关信息。 . “解决方案”是玩弄 GHC 扩展 OverlappingInstances ,这本身就有点像兔子洞。

关于Haskell 独立决定为我的数据类型推断 Bifunctor?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56121803/

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