(\x=>2.0*x) "地图" [1..10] "Can't find implementation for Enum Double"



当我在 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中,因为地图类型允许不保留原始类型的课程。

x => 2.0 * x的类型是Double -> Double的,[from .. to]是具有以下类型的enumFromTo的语法糖 - Enum a => a -> a -> List a因此您的表达式希望构建双精度列表,但不能,因为(可预测(没有双精度的枚举。

一种可能的解决方案是显式强制转换,让 Idris 找出源和目标类型:

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

相关内容

最新更新