我想写得到多个字符串输入,并终止在一个空行(“\ n”)的函数我有以下Haskell- IO字符串获得多行
getLines :: IO [String]
getLines = do x <- getLine
if x == ""
return()
else do xs <- getLines
return (x:xs)
失败编译说有有毛病的if语句
理想我想对这样的
getLines工作
苹果
鸟
猫
(进入被按下)
输出: [ “苹果”, “鸟”, “猫”]
谢谢!它现在有效! – lopezrican304 2013-04-03 21:26:51
'(x :) <$> getLines'也是可能的。根据定义,这不是更好,但在这种情况下,我更喜欢它比'做'符号。需要'输入Control.Applicative((<$>))',但。 – 2013-04-04 00:51:44
@Zoidberg:是的,我通常更喜欢应用风格,但不想过度改变这个例子。它也可以写成'getLines = untilNull getLine',其中'untilNull'被定义为无空格且无空格为'execWriterT.fix.ap(liftM(= <<)(ap(unless.null).ap(liftM(>>) (tell。(:[])))。const))。const.lift'与适当的导入。 – 2013-04-04 02:53:51