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大小