Haskell中没有明确声明类型对编译速度有多大影响?
例如:
f x y = x + y
-- versus
f :: Int -> Int -> Int
f x y = x + y
编辑:如果我的问题听起来好像我在问删除类型是否会使其更快,看起来就像我的措辞一样。 我的意思是,如果它使它变慢。 这是因为编译器现在必须在没有开发人员帮助的情况下确定它将使用哪种类型。
如注释中所述,添加类型签名不允许编译器跳过类型检查;它仍将检查您的类型签名是否与代码匹配。
删除类型签名也不会关闭类型检查;编译器仍将检查代码是否存在类型错误。
所以,实际上,是否编写类型签名通常对编译时间几乎没有影响。(它可能会对运行时性能产生重大影响,但通常根本不会影响编译时间。
通常类型检查在编译时间中可以忽略不计;通常解析、加载模块接口和链接需要更长的时间。
(当然,有些人用类型系统做了真正疯狂的事情,这可能会使编译速度大大变慢。但对于初学者Haskell来说,这不太可能重要。
如果编译器必须推断类型,它是否需要更长的时间?是的。
你能轻易地判断出这种延迟的幅度吗?不,但它肯定不小。
推理引擎非常复杂,接触它的人并不多。世界上你可以问这个问题的最好的人是西蒙·佩顿·琼斯博士。