在以下代码中
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
有人可以向我解释一下吗?
答案 0 :(得分:0)
我认为通常可以说在idris的REPL中检查类型推断是一个坏主意。存在于Idris文件中的REPL代码和代码行为不同。
您想要的功能将写为:
addy: Num a => a -> a -> a
addy x y = x + y
并且类型与您对Haskell的期望类似。 Idris中的类型推断通常非常弱(因为它不能用于依赖类型的类型系统)。