Haskell中如何使用自定义Pos类型计算两点间距离
Haskell Pos类型距离计算代码修正方案
错误原因
你的代码存在两个核心问题:
type关键字定义的是类型别名,仅给已有类型起别名,不会生成新的值构造器,你不能在函数参数的模式匹配位置写Pos(这是类型名,不属于值层面的语法)sqrt函数要求入参属于Floating类型类,你直接传入Int类型的dx、dy运算会触发类型不匹配错误,需要先做类型转换
修正后的代码
type Pos = (Int, Int) distancee :: Pos -> Pos -> Float distancee (x1,y1) (x2,y2) = sqrt (fromIntegral dx * fromIntegral dx + fromIntegral dy * fromIntegral dy) where dx = x2 - x1 dy = y2 - y1
补充说明
如果你希望参数匹配时可以带上Pos标识,可以用newtype定义自定义类型而非类型别名,写法如下:
newtype Pos = Pos (Int, Int) deriving (Eq, Show) distancee :: Pos -> Pos -> Float distancee (Pos (x1,y1)) (Pos (x2,y2)) = sqrt (fromIntegral dx * fromIntegral dx + fromIntegral dy * fromIntegral dy) where dx = x2 - x1 dy = y2 - y1
内容的提问来源于stack exchange,提问作者yoyo
相关产品推荐
相关产品推荐

