You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 05:24:07