在haskell中表示

Has*_*ase 0 haskell

所以我试图在haskell中编写一个函数,它执行以下操作:1.输入是字符串2.函数首先删除字符串的所有字母,只保留数字3.函数将字符串数转换为int数4.函数和字符串中的数字一起打印出来

我的代码直到'第3步

func str = 
    do 
    str <- filter (< 'a') str
    str2 <- map digitToInt str
    return str2
Run Code Online (Sandbox Code Playgroud)

不知何故,如果我删除第4行地图digitToInt它工作直到第2步罚款但这不起作用但我不知道这里的问题是什么

错误是与实际类型Char无法匹配的预期类型[Char]

先感谢您

Dan*_*ner 7

您根本不需要do符号,只需要正常的变量绑定.所以:

func str = str2 where
    str1 = filter (<'a') str
    str2 = map digitToInt str1
Run Code Online (Sandbox Code Playgroud)

跟踪最近使用的名称很烦人,不是吗?此外,它很容易犯错并输入str而不是str1某个地方或类似地.输入功能组成:

func str = str2 where
    str2 = (map digitToInt . filter (<'a')) str
Run Code Online (Sandbox Code Playgroud)

事实上,我会内联定义str2,然后str完全忽略:

func = map digitToInt . filter (<'a')
Run Code Online (Sandbox Code Playgroud)

我宁愿使用isDigit(<'a'); 我们可以同时折腾一笔钱.

func = sum . map digitToInt . filter isDigit
Run Code Online (Sandbox Code Playgroud)

在我看来,读起来很干净.