Haskell:monad和(:)操作符

Haskell:monad和(:)操作符,haskell,monads,Haskell,Monads,我有以下资料: parseExtensions :: GHC.Int.Int64 -> Get [Word32] parseExtensions size = do br <- bytesRead if (size - br > 20) then do ext <- parseExtension exts <- parseExtensions size ret

我有以下资料:

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
parseExtensions::GHC.Int.Int64->Get[Word32]
parseExtensions size=do
br 20)
那就做吧
extShorter:

liftM2 (:) parseExtension (parseExtensions size)
更好,我不确定:-\

更短:

liftM2 (:) parseExtension (parseExtensions size)

更好,我不确定:-\

我会说它更好,尽管我一直喜欢应用程序/一元的cons,即
::应用程序f=>fa->f[a]->f[a]
不幸的是,它不在标准库中,我第一次在Clean的解析器组合器库中看到它。以直接的应用程序风格,这就是
(:)parseExtension parseExtensions size
我会说它更好,尽管我一直喜欢应用程序/一元结构,例如:
:Applicative f=>fa->f[a]>f[a]
不幸的是,它不在标准库中,我第一次在Clean的parser combinator库中看到它。以直接的应用程序风格,这就是
(:)parseExtension parseExtensions大小