[英]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.