Haskell中将字符串列表转为小写的函数运行报错如何解决?
问题原因
你当前编写的makeSmall函数仅支持单个字符串的小写转换:
toLower的类型为Char -> Char,仅接收单个字符作为入参,返回对应的小写字符- 你写的
map toLower xs是遍历xs中的每一个元素,传入toLower处理,因此要求xs的类型为[Char](即字符串),此时makeSmall的类型为String -> String
你调用函数时传入的是[String]类型的字符串列表(等价于[[Char]]),相当于给toLower传入了[Char]类型的字符串,和toLower要求的Char类型不匹配,因此抛出了对应的类型错误。
修复方案
新增一层map遍历外层的字符串列表,对列表中每个字符串单独执行map toLower的小写转换即可,修改后的代码如下:
import Data.Char(toLower) makeSmall xs = map (map toLower) xs
你也可以直接指定函数类型,使用更简洁的eta化简写法:
import Data.Char(toLower) makeSmall :: [String] -> [String] makeSmall = map (map toLower)
修改完成后调用makeSmall ["Hi", "hELLO", "nO"],可以得到正确输出:["hi","hello","no"]
内容的提问来源于stack exchange,提问作者Niki
相关产品推荐
相关产品推荐

