簡體   English   中英

Haskell:Monads和(:)運算符

[英]Haskell: Monads and the (:) operator

我有以下幾點:

parseExtensions :: GHC.Int.Int64 -> Get [Word32]
parseExtensions size = do
    br <- bytesRead
    if (size - br > 20) 
        then do
            ext  <- parseExtension
            exts <- parseExtensions size
            return $ ext : exts
        else return []

parseExtension :: Get Word32
parseExtension = do
    name <- getWord32be
    size <- getWord32be
    info <- getBytes (fromIntegral size)
    return name

這個想法很簡單。 我正在使用Data.Binary.Get從文件中讀取數據。 只要我還有可用數據(大小-br> 20),就對其進行解析並重復。

在parseExtensions函數中是否有更簡單/更簡短/更好的方式來編寫“ then”? 不禁覺得我可以進行某種形式的尾遞歸。

短:

liftM2 (:) parseExtension (parseExtensions size)

更好,我不確定:-\\

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM