haskell 为什么显式写'Product Int'类型对任何'Num'类型都有效?

oaxa6hgo  于 2022-11-14  发布在  其他
关注(0)|答案(1)|浏览(166)

特别是,这个运算式会编译:

x = 4 :: Product Int

为什么字面量4可以是Product Int,即使它的类型是Num a => a

ukdjmx9f

ukdjmx9f1#

4是具有类型注解的表达式。unannotated 表达式的类型为Num a => a,但注解强制该类型为Product Int
该注解是法律的的,因为只要a具有Num示例(Int具有),Product a就具有Num示例:

> :info Product
newtype Product a = Product {getProduct :: a}
[...]
instance Num a => Num (Product a)
[...]
> Product 3 + Product 5
Product {getProduct = 8}

相关问题