如何在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
相关产品推荐
相关产品推荐

