实例声明中的类型推断与任何其他上下文中的工作方式相同。在这种情况下,有两种推理可以证明
x
Integer
.
-
十
出现在表达式中
Mod7 (x `mod` 7)
. 自从
Mod7
构造函数声明为
整数
x `mod` 7
必须是一个
. 自
mod
属于类型
Integral a => a -> a -> a
,如果
x`mod`7
整数
,然后是两者
十
7
也必须是
整数
(仅在以下情况下有效)
Integral Integer
保持,但它是这样的(没关系)。
-
lit
Expr a => Integer -> a
(在
Expr a
十
点燃
,所以它必须是
.
instance Expr Mod7
定义为
lit :: Integer -> Mod7
. 然而,这甚至不需要建立
x :: Integer
,因为参数类型
点燃
在任何情况下都是一样的
Expr
十
).