我想寫得到多個字符串輸入,並終止在一個空行(「\ 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