ppx_deriving plugin for HardCaml
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
pkg
src
src_test
.gitignore
.merlin
LICENSE.txt
Makefile
README.md
_tags
myocamlbuild.ml
opam

README.md

ppx_deriving Plugin for HardCaml

This module implements a plugin for the ppx_deriving rewriter that supports the HardCaml syntax:

  • Provide a record annotation to generate helper functions
  • Provide an optional bits attribute for signals
  • Provide a required width attribute for list and array

Module interface

Original syntax:

module S : interface
  signal
  signal_list{ }
  signal_array{| |}
end

New syntax:

module S : sig
  type 'a t = {
    signal       : 'a;
    signal_list  : 'a list;
    signal_array : 'a array;
  } [@@deriving hardcaml]
end

Module implementation

Original syntax:

module S = interface
  signal[2]
  signal_list{2}[4]
  signal_array{|2|}[4]
end

New syntax:

module S = struct
  type 'a t = {
    signal       : 'a       [@bits 2];
    signal_list  : 'a list  [@length 2][@bits 4];
    signal_array : 'a array [@length 2][@bits 4];
  } [@@deriving hardcaml]
end

Options

  • rtlprefix: prepend rtlprefix to the generated RTL name (string)
  • rtlsuffix: append rtlsuffix to the generated RTL name (string)
  • rtlmangle: when using interfaces, mangle the name of the interface and its signals (boolean)
  • extends: list of interfaces to extend (list)