2010-04-16 55 views
2

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

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) 

这是我到目前为止所提出的,我担心它甚至没有在正确的轨道上。虽然我知道这个问题是非常普遍的,但我会感谢一些与阅读应该做什么有关的帮助。

+0

你应该纪念这个作为“功课” ......看到,因为这是这是什么.. – 2010-04-16 02:58:30

+0

这对我来说看起来还不错(尽管我只学习了Haskell)。有什么特别的错误吗? – shosti 2010-04-16 04:09:16

+0

您的缩进不好。 – 2010-04-16 16:16:59

回答

-7

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

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

我建议用C编写你的程序,它非常适合这个任务,并且你的第一个Haskell程序是你认为在其他语言中比较棘手的东西。我自己也是机器学习算法的忠实拥趸,但无论您在其他语言中看起来难以找到的数据结构或算法,都可以尝试为Haskell重做。

只是习惯于少写很多代码。我的第一个主要的Haskell应用程序是一个网络训练库,使用强化学习和遗传算法,多线程。在350行代码中(包括大量的评论)。在我看来,这是Haskell的强大力量。

+0

我很乐意这样做,不幸的是,这是一个需要它在Haskell中的类的作业。 – Jon 2010-04-16 01:26:53

+0

啊,那会改变一切。在这种情况下,总体组织应尽可能少地使用一元代码。我听说它被描述为“围绕巨大的美味功能性魔法一团的命令式模具的薄壳”。换句话说,尽量使用尽可能少的命令式代码,并让代码调用大量纯粹的函数来检索数据。 – 2010-04-16 01:35:37

+6

Lion:C没有解析器组合器,它用Haskell的方式解析二进制文件。这不是一个IO问题,它是一个解析问题 - Haskell特别擅长。 – 2010-04-16 03:41:14

相关问题