Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Class 如果Haskell的编译器始终需要使用";::,指定多态函数的多态参数:Int";,为什么;显示2“;合法_Class_Function_Haskell_Show_Polymorphism - Fatal编程技术网

Class 如果Haskell的编译器始终需要使用";::,指定多态函数的多态参数:Int";,为什么;显示2“;合法

Class 如果Haskell的编译器始终需要使用";::,指定多态函数的多态参数:Int";,为什么;显示2“;合法,class,function,haskell,show,polymorphism,Class,Function,Haskell,Show,Polymorphism,如果我们键入show2,那么我们将得到“2”。但问题是show满足show::show a=>a->String,并且2是多态的,如果不幸的是show2::Int与show2::Integer不同,我们必须编写show2::Int和show2::Integer而不是简单地show2 我拒绝假设编译器足够聪明,可以知道当(A)=>显示A时,A的所有当前实例都是show,给出相同的结果,我们不需要指定显示A::X,当(A)=>显示A时,A的所有当前实例都是show,给出不同的结果,我们必须指定sho

如果我们键入
show2
,那么我们将得到“2”。但问题是show满足
show::show a=>a->String
,并且
2
是多态的,如果不幸的是
show2::Int
show2::Integer
不同,我们必须编写
show2::Int
show2::Integer
而不是简单地
show2


我拒绝假设编译器足够聪明,可以知道当
(A)=>显示A
时,A的所有当前实例都是show,给出相同的结果,我们不需要指定
显示A::X
,当
(A)=>显示A
时,A的所有当前实例都是show,给出不同的结果,我们必须指定
show a::X

这是由于默认规则造成的。所以
show2
实际上是
show(2::Integer)
。你可以在哈斯克尔2010年的报告中看到这一点

要回答第二个问题,编译器不够智能。这是由于类型默认而发生的

你可以查一下

 number = 2
在ghci中

*Main> :t number 
 number :: Integer
*Main> :t number
number :: Int
现在,您可以自定义默认签名

 default (Int)
 number = 2
在ghci中

*Main> :t number 
 number :: Integer
*Main> :t number
number :: Int

您可以在我引用的文档中了解类型何时为默认值。

谢谢,您的答案也适用于为什么数据为默认值。TypeTable导入了“typeOf 2=Integer”。