如何在map函数中结合Either使用lambda?代码语法错误排查
你的代码的两处错误及修正方案
错误分析
语法错误:括号不匹配+参数结构错误
你写的代码中,lambda表达式(\Left x -> x + 1)缺少对应的右括号,同时错误地将目标列表[1,2]直接嵌套进lambda的括号内。map函数的正确调用形式是map 处理函数 目标列表,函数与列表是两个独立参数。逻辑错误:误用
Left构造子
你的列表元素是普通整数,并非Either类型的值,这里完全不需要使用Left——它是Either a b类型的构造子,用于表示“左值”分支,和当前处理普通整数列表的需求无关,就算修复语法错误,也会触发类型不匹配的报错。
修正后的代码
如果只是要给列表中每个元素加1,正确写法有两种:
完整lambda写法
map (\x -> x + 1) [1, 2]
简洁运算符写法
map (+1) [1, 2]
以上两种写法都会返回你预期的结果:[2, 3]
内容的提问来源于stack exchange,提问作者coderodde
相关产品推荐
相关产品推荐

