codec-beam: Erlang VM byte code assembler

This is a package candidate release! Here you can preview how this package release will appear once published to the main package index (which can be accomplished via the 'maintain' link below). Please note that once a package has been published to the main package index it cannot be undone! Please consult the package uploading documentation for more information.

[maintain] [Publish]

Erlang VM byte code assembler.


[Skip to Readme]

Properties

Versions 0.1.0, 0.1.1, 0.2.0, 0.2.0
Change log None available
Dependencies base (>=4.8 && <5), bytestring (>=0.10.6), containers (>=0.5.6.2), text (>=1.2.2), zlib (>=0.6.1.1) [details]
License BSD-3-Clause
Author
Maintainer h.kofigumbs@gmail.com
Category Language, Codec
Home page https://github.com/hkgumbs/codec-beam#readme
Bug tracker https://github.com/hkgumbs/codec-beam/issues
Source repo head: git clone git://github.com/hkgumbs/codec-beam.git
Uploaded by hkgumbs at 2018-07-06T14:29:34Z

Modules

[Index]

Downloads

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees


Readme for codec-beam-0.2.0

[back to package description]

Build Status Erlant/OTP Release

NOTE: Participation is encouraged! Make issues, ask questions, submit pull requests (even if it’s your first time contributing to open-source — you’ll get lots of help), and give feedback!

Erlang VM byte code assembler for implementing compile-to-beam languages. The goal is to a provide delightful API for generating BEAM instructions from pure Haskell.

Usage

This example writes a simple module to a file:

{-# LANGUAGE OverloadedStrings #-}
module Main where
import qualified Data.ByteString.Lazy as LBS

import Codec.Beam.Instructions (func_info, label, move, return')
import qualified Codec.Beam as Beam

main :: IO ()
main =
  LBS.writeFile "test_module.beam" $
    Beam.encode "test_module"
      [ Beam.export "tuple_of_one" 0
      ]
      [ label (Beam.Label 1)
      , func_info "tuple_of_one" 0
      , label (Beam.Label 2)
      , move (Beam.Tuple [Beam.Integer 1]) (Beam.X 0)
      , return'
      ]

After you run that program, you can load the resulting module from the Erlang shell!

$ erl
1> l(test_module).
2> test_module:tuple_of_one().
{1}

You can find an example project on GitHub.

Build

Use Stack:

stack build --test

Acknowledgements

Thanks to the following projects, which helped me understand the BEAM file format: