Haskell中的ByteStrings

时间:2010-04-16 00:55:48

标签: parsing haskell binary io bytestring

所以我正在尝试编写一个可以在java类文件中读取字节码的程序。为此,我使用Data.Binary和Data.ByteStream。我遇到的问题是因为我对Haskell很新,我实际上在使用这些工具时遇到了麻烦。

module Main where
import Data.Binary.Get
import Data.Word
import qualified Data.ByteString.Lazy as S

getBinary :: Get Word8
getBinary = do
a <- getWord8
return (a)

main :: IO ()
main = do
contents <- S.getContents
print (getBinary contents)

这是我到目前为止所提出的,我担心它甚至不是在正确的轨道上。虽然我知道这个问题非常笼统,但我会对阅读时应该做些什么有所帮助。

2 个答案:

答案 0 :(得分:3)

您可以在Haskell中使用现有的Java分析/解析工具吗? E.g。

http://hackage.haskell.org/package/jarfind

如果您需要学习如何使用Data.Binary,我建议使用Real World Haskell:http://book.realworldhaskell.org/read/code-case-study-parsing-a-binary-data-format.html

答案 1 :(得分:-7)

这实际上是使用Haskell的最糟糕的应用程序之一。为什么呢?

很多I / O意味着你需要处理monad;一旦你对语言的其他独特功能感到满意,我会建议你解决这个问题。即使是拥有数学研究生学位的人(或者我听说过),他们也是一个复杂的话题。不仅如此,如果你开始编写主要是I / O的代码,你可能会觉得你可以而且应该在Haskell中强制执行许多算法。不是这种情况。也许对你来说最重要的是,我猜你被这种语言所吸引,因为它几乎是出了名的短而简单的代码块。除了I / O和手动内存管理(实际上是I / O)之外,几乎所有语言都是如此。

我建议用C语言编写你的程序,它非常适合这个任务,让你的第一个Haskell程序成为你认为在其他语言中比较棘手的东西。我自己也是机器学习算法的忠实粉丝,但无论你在其他语言中遇到什么样的数据结构或算法,都要尝试为Haskell重做。

习惯于编写更少的代码。我的第一个主要的Haskell应用程序是一个nueral-network培训库,它使用强化学习和遗传算法,多线程。 350行代码(包括大量的评论)。在我看来,这是Haskell的严重威力。