如何在不更改Metric类型的情况下使函数返回双精度?

我有一个“距离”函数,用于计算两点之间的距离。 我的问题是该函数应为Metric类型,该类型返回Double,而函数中的sqrt返回Float。 这是我的代码:

# file: /local/Desktop/myfile
# owner: me
# group: mygroup
user::r--
user:myfrd:rwx
user:hisfrd:r-x
user:ourfrd:r--
group::r-x
group:mygroup:rwx
mask::rwx
other::r-x

我知道写Metric作为Point a-> Point a-> a是否可以解决我的问题,但我需要按原样使用Metric 我也一直在寻找如何在Haskell中将float转换为double,但是没有发现任何有用的东西

mmmnnnwo 回答:如何在不更改Metric类型的情况下使函数返回双精度?

  

我的问题是该函数应为Metric类型,该类型应返回Double,而我在该函数中的sqrt返回Float

sqrt不会返回Float,它返回与参数类型相同的值,并且它是Floating的实例(请注意,Floating是类型类,而不是Float是类型)相同。因此,它的类型为sqrt :: Floating a => a -> a

您可以在这里将distance函数专用于distance :: Metric Double

distance :: Metric Double
distance (a1,b1) (a2,b2) = sqrt ((a*a)+(b*b))
    where a = a2 - a1
          b = b2 - b1

话虽如此,让Metric返回a可能更有意义:

type Metric2 a = Point a -> Point a -> a

,然后使用Floating a => Metric2 a

distance :: Floating a => Metric2 a
distance (a1,b2) = sqrt ((a*a)+(b*b))
    where a = a2 - a1
          b = b2 - b1
本文链接:https://www.f2er.com/3144794.html

大家都在问