【发布时间】:2017-11-14 05:06:37
【问题描述】:
我在尝试将元组的 2 个部分相加时遇到了问题
函数类型:
close :: (Floating a, Ord a) => (a,a) -> (a,a) -> Float
函数定义:
close y x = sqrt (((fromIntegral(snd x) - fromIntegral(snd y))^2) + ((fromIntegral(fst x) - fromIntegral(fst y)^2)))
在为函数提供格式 ( , ) 的 y 元组和格式 ( , ) 的 x 元组时,它应该计算两个坐标之间的距离。 但是在启动时出现以下错误:
Couldn't match expected type 'Float' with actual type 'a'
a is a rigid type variable bound by...
我明白为什么会出现这个问题,但我不知道如何解决它
【问题讨论】:
-
您在类型定义中提到
Floating a,然后在函数中使用相同的a类型提供fromIntegral,该类型应该属于Integral类型类......这是一个冲突。 -
您需要一个函数
Floating a => a -> Float来产生结果。我希望close :: Floating a => (a,a) -> (a,a) -> a或close :: (Integral a, Floating b) => (a,a) -> (a,a) -> b。Ord和Float来自哪里? -
@molbdnilo 也许他想从输出中得到一个具体的
Float? -
@molbdnilo 是的,我不知道为什么我有 float.... 我想我只是没有意识到我可以使用 a 作为 float 的模棱两可
标签: haskell types type-mismatch