Idris类型导出算术运算

时间:2017-08-13 08:19:19

标签: polymorphism type-inference idris

在以下代码中

Idris> :t \x => x + x
\x => x + x : Integer -> Integer

Idris为x变量派生一个Integer类型,我认为它应该像Haskell一样派生出一个接口限制:

Haskell> :t (\x y -> x + y)
(\x y -> x + y) :: Num a => a -> a -> a

然后它甚至不像Integer,接受Double类型:

Idris> (\x => x + x) 2.0 
4.0 : Double

有人可以向我解释一下吗?

1 个答案:

答案 0 :(得分:0)

我认为通常可以说在idris的REPL中检查类型推断是一个坏主意。存在于Idris文件中的REPL代码和代码行为不同。

您想要的功能将写为:

addy: Num a => a -> a -> a
addy x y = x + y

并且类型与您对Haskell的期望类似。 Idris中的类型推断通常非常弱(因为它不能用于依赖类型的类型系统)。