无法演绎超类

时间:2017-11-03 10:33:09

标签: haskell typeclass

在以下代码中,GHC在db = sqlite3.connect(dbfile) cursor = db.cursor() cursor.execute("SELECT gsr, {} FROM {} WHERE session_id=:id".format(column,table),{"id":id}) 实例的定义中找不到Functor实例。

为什么GHC不推测给定 Monoidal约束是否满足,那么Applicative 已经已经存在? (这个推理有什么名称'能力'?)

Functor

我知道当然可以向import Prelude hiding (Applicative (..), Monad (..)) class Functor f => Applicative f where pure :: a -> f a (<*>) :: f (a -> b) -> f a -> f b class Functor f => Monoidal f where unit::f () (*) ::f a -> f b -> f (a,b) instance Applicative f => Monoidal f where unit = pure () a * b = undefined 添加明确的Functor f约束以避免错误,但我的问题更多的是关于为什么实例解析以这种方式工作

Monoidal

1 个答案:

答案 0 :(得分:3)

对我来说看起来像个错误。这是一个显示问题的最小文件,并且不依赖任何重新命名Prelude内容或undefined s的shenanigans。

{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE UndecidableInstances #-}
class A x
class A x => B x
class A x => C x
instance B x => C x

我建议使用此文件(或非常喜欢它)在GHC错误跟踪器上提交错误;发现B x暗示A x应该是可能的原因。