2013-07-31 66 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)