ByteStrings в Хаскеле - PullRequest
       35

ByteStrings в Хаскеле

2 голосов
/ 16 апреля 2010

Итак, я пытаюсь написать программу, которая может читать в файле классов Java в виде байт-кода. Для этого я использую Data.Binary и Data.ByteStream. У меня проблема в том, что я довольно плохо знаком с Хаскеллом, у меня проблемы с использованием этих инструментов.

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 ]

3 голосов
/ 16 апреля 2010

Можете ли вы использовать один из существующих инструментов анализа / анализа Java в Haskell? Э.Г.

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

0 голосов
/ 16 апреля 2010

Это на самом деле одно из худших приложений, в котором можно использовать Haskell. Почему?

Множество операций ввода / вывода означает, что вам нужно иметь дело с монадами; который я бы предложил решить, как только вы освоитесь с другими уникальными особенностями языка, а не раньше. Это сложная тема даже для дипломированных специалистов по математике (или, как я слышал). Мало того, что если вы начнете писать код, который в основном является вводом-выводом, у вас может сложиться впечатление, что вы можете и должны выполнять множество алгоритмов в Haskell. Это не вариант. Возможно, самое главное для вас, я предполагаю, что вы были привлечены к этому языку из-за его заведомо коротких и простых кусков кода. Это относится практически ко всему языку, кроме ввода-вывода и ручного управления памятью (что на самом деле является вводом-выводом).

Я бы предложил написать вашу программу на C, которая идеально подходит для этой задачи, и пусть ваши первые программы на Haskell будут вещами, которые вы считаете довольно сложными на других языках. Я сам большой поклонник алгоритмов машинного обучения, но какие бы структуры данных или алгоритмы вам ни казались сложными в других языках, попробуйте переделать для Haskell.

Просто привыкните писать гораздо меньше кода. Моим первым крупным приложением на Haskell была учебная библиотека для сетевых сетей, в которой использовались как многопоточные, так и обучающие методы подкрепления и генетические алгоритмы. 350 строк кода (включая большое количество комментариев). Это серьезная сила Хаскелла, на мой взгляд.

...