【发布时间】:2019-11-07 12:41:45
【问题描述】:
我有一个函数“距离”,可以计算两点之间的距离。 我的问题是该函数应该是 Metric 类型,该类型返回一个 Double,而我在函数中的 sqrt 返回一个 Float。 这是我的代码:
type Metric a = Point a -> Point a -> Double
type Point a = (a, a)
distance :: Floating a => Metric a
distance (a1,b1) (a2, b2) = sqrt ((a*a)+(b*b))
where a = a2 - a1
b = b2 - b1
我知道如果将 Metric 写为 Point a -> Point a -> a 将解决我的问题,但我需要按原样使用 Metric 我还查找了如何在 Haskell 中将浮点数转换为双精度数,但没有发现任何帮助
【问题讨论】:
-
sqrt不返回Float,它返回一个与参数类型相同的值,即Floating的一个实例(注意Floating是一个typeclass,并且不与Float相同,后者是一个类型)。您可以在这里将您的distance函数专门化为distance :: Metric Double
标签: haskell type-conversion sqrt