2015-04-22 78 views
0

有谁知道我在哪里可以找到哈斯克尔hGetLines实施

hGetLine :: Handle -> IO Text 

功能的实现?我必须在具有多个子任务的haskell中实现一个HTTP服务器。第一种是写

hGetLines :: Handle -> IO [Text] 

功能读取一切从IO通道,直到第一空行和线被返回作为文本的列表的执行。

回答

1

你不需要知道如何hGetLine实施要做到这一点:

hGetLines :: Handle -> IO [Text] 
hGetLines h = do 
    line <- hGetLine h 
    if null line 
    then return [] 
    else do 
     lines <- hGetLines h 
     return (line:lines) 
6
  1. 找到它Hackage:https://hackage.haskell.org/package/base-4.6.0.1/docs/System-IO.html#v:hGetLine

  2. 点击 “来源” 链接:https://hackage.haskell.org/package/base-4.6.0.1/docs/src/GHC-IO-Handle-Text.html#hGetLine

  3. 阅读来源:

    hGetLine h = 
        wantReadableHandle_ "hGetLine" h $ \ handle_ -> do 
        hGetLineBuffered handle_ 
    

但是如果你想写一个hGetLines函数,你不需要知道hGetLine已实施。您可以在执行hGetLines时仅使用hGetLine

+1

更是这样,我不认为'wantReadableHandle_'真的是你想使用的功能,所以在看这个实现是完全没用的。但请注意,他正在讨论'Data.Text.IO'中的'hGetLine',而不是标准库。 – alternative

+0

@alternative您在所有帐户中都是正确的!我完全错过了文本类型签名。傻我。虽然同样的过程适用。 – kqr