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

如何在Haskell中获取函数入参对应的类型边界值

问题排查与修复方案

你的代码存在3处核心错误,修正后可正常运行:

  • 拼写错误:调用getMaxParam时参数写为fun,但实际定义的函数名是func
  • maxBound使用错误:maxBound :: Bounded a => a是不需要传入参数的多态值,你传入typeOf a属于用法完全错误
  • 变量未定义:getMaxParam函数作用域中不存在名为a的变量,你试图引用一个不存在的绑定

修正后完整代码

import Data.Int
import Data.Typeable
import Prelude

class (Bounded a, Enum a) => Finite a
instance Finite Int8 where

func :: Int8 -> Int8
func x = x

-- 若你不需要用到Eq b约束可以直接删除
getMaxParam :: (Finite a, Eq b) => (a -> b) -> a
-- 直接返回对应类型的maxBound,多态会根据传入函数的入参类型自动推导
getMaxParam _ = maxBound

-- 修正函数名拼写
a = getMaxParam func

运行验证:在ghci中执行print a会输出127,也就是Int8类型的最大值,完全符合你获取函数入参边界的需求。

可选优化

如果当前不需要给Finite类扩展自定义方法,你可以直接用Bounded a约束替代Finite a,无需自定义类也能实现相同效果。

内容的提问来源于stack exchange,提问作者zero

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 18:09:02