这个上下文是什么意思:(Monad m, (~) * a ())?
What does this context mean: (Monad m, (~) * a ())?
我找到了以下 class 个实例:(Monad m, (~) * a ()) => LaTeXC (LaTeXT m a)
,但不太理解它的上下文。
(~) * a ()
是什么意思?我在哪里可以阅读它?
(~)
是类型级相等(你可以把它写成 =
或 ==
的某种变体,但人们认为这个符号已经有足够多的不同含义,因此引入另一个会令人困惑)。 *
就是那种类型。所以 (~) *
是两个(可居住的)类型相等的断言。也就是说,实例也可以这样写:
instance Monad m => LaTeXC (LaTeXT m ())
为什么不是呢?好吧,这是一个推理问题。它的编写方式让编译器选择这个实例,即使它(还)不知道 LaTeXT
的最终参数是 ()
,然后强制它,而提议的替代实例只会抱怨.
我找到了以下 class 个实例:(Monad m, (~) * a ()) => LaTeXC (LaTeXT m a)
,但不太理解它的上下文。
(~) * a ()
是什么意思?我在哪里可以阅读它?
(~)
是类型级相等(你可以把它写成 =
或 ==
的某种变体,但人们认为这个符号已经有足够多的不同含义,因此引入另一个会令人困惑)。 *
就是那种类型。所以 (~) *
是两个(可居住的)类型相等的断言。也就是说,实例也可以这样写:
instance Monad m => LaTeXC (LaTeXT m ())
为什么不是呢?好吧,这是一个推理问题。它的编写方式让编译器选择这个实例,即使它(还)不知道 LaTeXT
的最终参数是 ()
,然后强制它,而提议的替代实例只会抱怨.