我是新来的.
所以我得到了这个工作:
foo :: String -> String
foo s = do replace "aoa" "a" s
Run Code Online (Sandbox Code Playgroud)
(键入foo "aoa"返回"a")
但是当我添加另一个替换:
foo :: String -> String
foo s = do replace "aoa" "a" s
replace "uou" "u" s
Run Code Online (Sandbox Code Playgroud)
(打字foo "aoa"退货"aoa")
一切都破了,我收到了这个警告:
A do-notation statement discarded a result of type ‘Char’
Suppress this warning by saying ‘_ <- replace "aoa" "a" s’
or by using the flag -fno-warn-unused-do-bind
Run Code Online (Sandbox Code Playgroud)
由于我不想压制警告,因此此错误消息对我没有任何意义.
我错过了什么?
Edit1
示例:
"aoaaoa" -> "aa" //Affected
"uouaoa" -> "ua" //Affected
"aua" -> "aua" //Not affected
Run Code Online (Sandbox Code Playgroud)
您不需要使用do符号来实现简单的字符串替换.但由于字符串是Monads,编译器假设您打算将字符串用作Monad并使用该假设给出错误消息.
如果你想简单地将两个调用链接在一起replace,你可以写:
foo s = replace "uou" "u" (replace "aoa" "a" s)
Run Code Online (Sandbox Code Playgroud)