使用类型同义词定义实例
如果这已经被问过/回答过很多次了,我很抱歉——我很难确定问题的实际是什么,因此不知道要搜索什么。
本质上,我定义了一个类:
class (MonadIO m) => Logger m where ...
然后我有一个类型(我想说类型同义词,但我不确定这是否是正确的“术语”):
type ResourceOpT r m a = StateT (ResourceCache r) m a
为什么这个实例是完全有效的:
instance (MonadIO m) => Logger ( StateT s m )
但不是这个(我想第一个更抽象/更可取,但我试图理解为什么):
instance (MonadIO m) => Logger ( ResourceOpT r m )
根据我的定义,两者不应该是等效的ResourceOpT吗?具体来说,我得到的错误是:
The type synonym 'ResourceOpT' should have 3 arguments, but has been given 2 In the instance declaration for 'Logger (ResourceOpT r m)'
我有一种感觉,我正在做的事情在概念上“应该”起作用,但要么我的语法错误,要么我遗漏了某些东西(可能是语言扩展),或者应该让它起作用。
无论如何,我很想得到您的意见并了解为什么这是错误的以及为什么我应该/不应该这样做。
提前致谢。