Haskell如何将整数文字转换为不同的类型?

时间:2017-06-28 12:35:22

标签: haskell

我有以下匿名功能:

*Exercises> g = \(Sum n) -> Sum (n - 1)

我用它像:

*Exercises> g (Sum 56)
Sum {getSum = 55}
*Exercises> g 56
Sum {getSum = 55}

第二个例子,编译器如何将56转换为Sum 56

在序言中,我看到SumNum的一个实例,但不清楚转换。

1 个答案:

答案 0 :(得分:8)

当Haskell看到56之类的整数文字时,它会将其解释为fromInteger 56fromInteger的类型为Num a => Integer -> a,因此此代码的类型为Num a => a。 (任何类型,此处称为a,它是Num类的成员。)

这意味着当您在需要Num成员的上下文中使用它时(在您的情况下为Sum),它会将“a”设置为Sum },然后选择fromInteger类型的Integer -> Sum版本。因此fromInteger 56 :: Sum