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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 08:36:01