Parsing Haskell的ByteStrings

Parsing Haskell的ByteStrings,parsing,haskell,binary,io,bytestring,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 <

因此,我正在尝试编写一个程序,可以在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)

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

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

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

我建议在C中编写你的程序,它非常适合这个任务,让你的第一个Haskell程序成为你认为在其他语言中比较棘手的东西。我本人特别喜欢机器学习算法,但无论您在其他语言中发现什么样的数据结构或算法困难,请尝试为Haskell返工


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

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

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

我建议在C中编写你的程序,它非常适合这个任务,让你的第一个Haskell程序成为你认为在其他语言中比较棘手的东西。我本人特别喜欢机器学习算法,但无论您在其他语言中发现什么样的数据结构或算法困难,请尝试为Haskell返工


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

您能使用Haskell中现有的Java分析/解析工具吗?例如


如果您需要学习如何使用Data.Binary,我建议您使用真实世界的Haskell:

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


如果您需要学习如何使用Data.Binary,我建议您使用真实世界的Haskell:

我很乐意这样做,不幸的是,这是一个类的作业,要求它必须在Haskell中。啊,这改变了一切。在这种情况下,一般的组织是尽可能少的一元代码。我听说它被描述为一个薄薄的外壳,围绕着一个巨大的、美味的、功能神奇的斑点。换句话说,尽量少使用命令式代码,让代码调用大量纯函数来处理检索到的数据。Lion:C没有像Haskell那样使用解析器组合器来解析二进制文件。这不是一个IO问题,而是一个解析问题——Haskell特别擅长这一点。仅仅因为它在java类文件中读取,并不意味着有很多I/O。在完整上下文中理解范畴理论单子是一个复杂的主题。哈斯克尔的单子只是以前者命名,一点也不复杂。它是一个具有两个函数的类型类,大多数常见实例的标准库代码几乎不比上述问题中的代码长。忽略所有的monad教程,大多数都是无用的或者更糟糕的。我很乐意这样做,不幸的是这是一个cl的作业
这要求它在哈斯克尔。啊,这改变了一切。在这种情况下,一般的组织是尽可能少的一元代码。我听说它被描述为一个薄薄的外壳,围绕着一个巨大的、美味的、功能神奇的斑点。换句话说,尽量少使用命令式代码,让代码调用大量纯函数来处理检索到的数据。Lion:C没有像Haskell那样使用解析器组合器来解析二进制文件。这不是一个IO问题,而是一个解析问题——Haskell特别擅长这一点。仅仅因为它在java类文件中读取,并不意味着有很多I/O。在完整上下文中理解范畴理论单子是一个复杂的主题。哈斯克尔的单子只是以前者命名,一点也不复杂。它是一个具有两个函数的类型类,大多数常见实例的标准库代码几乎不比上述问题中的代码长。忽略所有的单子教程,大多数都是无用的或更糟的。你应该把它标记为家庭作业。。。因为这就是问题所在……不过,对我来说,自己学习Haskell似乎没什么问题。有什么特别的错误吗?你的缩进不好。你应该把这个标记为家庭作业。。。因为这就是问题所在……不过,对我来说,自己学习Haskell似乎没什么问题。有什么特别的错误吗?你的压痕不好。