2013-07-31 95 views
0

我目前正在嘗試瞭解如何處理`Maybe(Int,ByteString)'函數的返回類型Data.ByteString.Char8.readInt,我已經通過類型檢查移除了Maybe,但是不明白如何進一步處理我現在擁有'(Int,ByteString)'的類型。我覺得我很可能錯過了一些明顯的東西,我希望有人能指出我正確的方向。任何幫助表示讚賞!Haskell ByteString readInt返回類型問題

+1

使用'fst'或模式匹配。 – chirlu

+0

乾杯! fst就在工作之前就像一個魅力! – stickybynature

+2

您應該使用模式匹配,或者至少知道如何使用它 - 它比'fst'更基礎。無論如何,你可能是模式匹配來處理'Maybe' - 我的意思是,你當然不會使用'fromJust',對吧? ('fromJust'是一個部分函數,​​這意味着它會在程序失敗時崩潰 - 並且也帶有無益的錯誤信息,你應該幾乎不會使用它。) – shachaf

回答

1

readInt設計用於編寫非常高效的模式匹配循環。例如。以ascii格式總和一個數字文件:

import qualified Data.ByteString.Lazy.Char8 as S 

main = print . go 0 =<< S.getContents 
    where 
    go !n !s = case S.readInt s of -- lazily reads current line 
        Nothing  -> n 
        Just (k,t) -> go (n+k) (S.tail t)