2

所以我正在尝试编写一个可以将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)

到目前为止,这就是我想出的,我担心它甚至不是在正确的轨道上。虽然我知道这个问题非常笼统,但我希望能对我应该做的阅读提供一些帮助。

4

2 回答 2

3

您可以使用 Haskell 中现有的 Java 分析/解析工具之一吗?例如

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

于 2010-04-16T03:40:36.323 回答
-7

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

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

我建议用 C 编写你的程序,它非常适合这项任务,并且你的第一个 Haskell 程序是你认为在其他语言中相当棘手的东西。我自己是机器学习算法的特别粉丝,但无论您在其他语言中似乎觉得困难的任何数据结构或算法,都尝试为 Haskell 返工。

只是习惯于编写更少的代码。我的第一个主要 Haskell 应用程序是一个神经网络训练库,它使用强化学习和遗传算法,多线程。350 行代码(包括大量注释)。在我看来,这就是 Haskell 的强大功能。

于 2010-04-16T01:22:55.453 回答