特别是,这个运算式会编译:
x = 4 :: Product Int
为什么字面量4可以是Product Int,即使它的类型是Num a => a?
4
Product Int
Num a => a
ukdjmx9f1#
4是具有类型注解的表达式。unannotated 表达式的类型为Num a => a,但注解强制该类型为Product Int。该注解是法律的的,因为只要a具有Num示例(Int具有),Product a就具有Num示例:
a
Num
Int
Product a
> :info Product newtype Product a = Product {getProduct :: a} [...] instance Num a => Num (Product a) [...] > Product 3 + Product 5 Product {getProduct = 8}
1条答案
按热度按时间ukdjmx9f1#
4
是具有类型注解的表达式。unannotated 表达式的类型为Num a => a
,但注解强制该类型为Product Int
。该注解是法律的的,因为只要
a
具有Num
示例(Int
具有),Product a
就具有Num
示例: