В следующем коде
Idris> :t \x => x + x
\x => x + x : Integer -> Integer
Idris выводит тип Integer для переменной x, где я думаю, что он должен выводить ограничение интерфейса, как в 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
Кто-нибудь может мне это объяснить?
Idris
не так совершенен, как в Haskell. С зависимыми типами ваш вывод типа не может быть таким хорошим. Вероятно, здесь происходит что-то похожее на ограничение мономорфизма. Чтобы найти лучшее объяснение этого поведения, вам, вероятно, следует открыть ошибку в репозиторииidris-dev
: github.com/ idris-lang/Idris-dev/issues - person Shersh   schedule 13.08.2017