在以下代码中,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
答案 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
应该是可能的原因。