(\ x => 2.0 * x)`map` [1..10]“无法找到Enum Double的实现”

时间:2018-04-17 06:22:57

标签: idris

当我在Idris解释器中键入该简单表达式时,会导致错误:

Idris> (\x=>2.0*x) `map` [1..10]
When checking an application of function Prelude.Functor.map:
        Can't find implementation for Enum Double

到底发生了什么?

我希望这可行,因为List Int会被映射到List Double,因为地图类型允许不保留原始类型的课程。

1 个答案:

答案 0 :(得分:4)

\x => 2.0 * x的类型Double -> Double[from .. to]enumFromTo的语法糖,具有以下类型 - Enum a => a -> a -> List a因此您的表达式需要构建一个双打列表,但是因为(可预测)没有双打枚举。

一种可能的解决方案是明确地让伊德里斯找出源和目的地类型:

Idris> (\x=>2.0 * (cast x)) `map` [1..10]
[2.0, 4.0, 6.0, 8.0, 10.0, 12.0, 14.0, 16.0, 18.0, 20.0] : List Double