我有以下代码,我已经尝试了多种方法来编写它,但我不能使它工作.我需要的是if在do块内使用条件.
palin :: IO ()
palin
= do line <- getLine
putStr line
if True
then putStr line
Run Code Online (Sandbox Code Playgroud)
我将条件更改为true只是为了让它更容易.我尝试添加else句子,但我也一样.
dup*_*ode 11
在Haskell中,if-else表达式并不意味着"如果为true,则执行foo;否则,执行bar",但"如果为true,则值为foo;否则,值为bar".出于这个原因,你不能省略else,就像conditon ? foo : bar在其他语言中使用三元if运算符()时一样.在您的情况下,then部件是类型的值IO (),因此您需要else具有相同类型的值.如果条件为false,您不希望实际发生antyhing,最直接的解决方案是使用虚拟IO ()值,return ():
palin :: IO ()
palin
= do line <- getLine
putStr line
if True
then putStr line
else return ()
Run Code Online (Sandbox Code Playgroud)
你也可以使用when函数from Control.Monad,它具有相同的效果:
import Control.Monad
palin :: IO ()
palin
= do line <- getLine
putStr line
when True (putStr line)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6737 次 |
| 最近记录: |