# jvm-binary
A library for reading and writing Java class-files. To get started
importing the `Language.JVM` file should be sufficient for most uses.
If you want to access Code elements of methods it is recommended to
import `Language.JVM.Attribute.Code` qualified, like this:
```haskell
import Language.JVM
import qualified Language.JVM.Attribute.Code as Code
import qualified Data.ByteString.Lazy as BL
main :: IO ()
main =
ecfl <- readClassFile <$> BL.readFile "test/data/project/Main.class"
case ecfl of
Right clf -> do
print (cThisClass clf)
print (cSuperClass clf)
Left msg ->
print msg
```
## Stages
There are two stages in the current state of the repository. `Low` is closer
to the class-file, while the `High` stage is easier to work with. The reason
that we have the two stages is that the class-file representation has indices
into the Constant Pool. The `High` stage eliminates all these problems.
## Todo's
- Add more Attributes as to the
[docs](http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html#jvms-4.7).
- Add documentation for Code
- Setup regular benchmarks
## Developing
Use stack to build, test, and benchmark.