Haskell函数调用时字符参数与列表类型不匹配,如何修改参数定义?
错误根因
你定义函数时第一个参数写为[a],这是Haskell的列表模式匹配语法,代表匹配仅包含一个元素的列表,因此编译器推导foo的第一个入参是列表类型,你调用时传入的'a'是Char类型,自然触发类型不匹配错误。
修正方法
直接删除第一个参数外层的方括号,将[a]改为普通变量a即可,修改后的函数定义如下:
foo a ((x,y):xs) = x
补充说明:上述修正后的函数仅在传入的元组列表非空时可以正常运行,如果你需要处理空列表的边界场景,可以额外补充分支:
-- 可根据实际需求调整空列表的返回值或报错逻辑 foo a [] = error "传入的元组列表不能为空" foo a ((x,y):xs) = x
内容的提问来源于stack exchange,提问作者Niki
相关产品推荐
相关产品推荐

