我找到了以下类实例:(Monad m, (~) * a ()) => LaTeXC (LaTeXT m a)
但不能完全理解它的上下文.
什么(~) * a ()
意思?我在哪里可以阅读它?
(~)
是类型级相等(你可以把它写成=
or的某个变体==
,但是意见是这个符号已经有足够的不同含义引入另一个会令人困惑).*
是那种类型.所以(~) *
是断言两个(危旧房)类型相同.换句话说,实例也可以这样写:
instance Monad m => LaTeXC (LaTeXT m ())
Run Code Online (Sandbox Code Playgroud)
为什么不呢?嗯,这是一个推理问题.编写它的方式使得编译器选择这个实例,即使它(但是)不知道最后的参数LaTeXT
是()
,然后强制它,而建议的替代实例只会抱怨.