假设我定义了一个多参数类型类:
{-# LANGUAGE MultiParamTypeClasses, AllowAmbiguousTypes, FlexibleContexts, FlexibleInstances #-}
class Table a b c where
decrement :: a -> a
evalutate :: a -> b -> c
然后,为了简单起见,我定义了一个使用 的函数decrement
:
d = decrement
当我尝试在ghci
(版本 8.6.3)中加载它时:
• Could not deduce (Table a b0 c0)
arising from a use of ‘decrement’
from the context: Table a b c
bound by the type signature for:
d :: forall a b c. Table a b c => a -> a
at Thing.hs:13:1-28
The type variables ‘b0’, ‘c0’ are ambiguous
Relevant bindings include d :: a -> a (bound at Thing.hs:14:1)
These potential instance exist:
instance Table (DummyTable a b) a b
这让我感到困惑,因为 of 的类型d
正是 的类型decrement
,它在类声明中表示。
我想到了以下解决方法:
data Table a b = Table (a -> b) ((Table a b) -> (Table a b))
但这似乎在符号上不方便,而且我也只是想知道为什么我首先会收到此错误消息。