MyNixOS website logo
Description

DSV (de)serialization.

The library generates parsers and printers for given data types, in the form of command-line arguments or DSVs – so that they can be used to quickly get CLIs via a shared library, while being suitable for scripting and as user interfaces.

Coalpit

Coalpit is a library for building command-line interfaces: the goal is to get interfaces quickly and easily, while keeping them language-agnostic and more user- and shell scripting-friendly than JSON and similar formats.

Given a type, it derives instances to print and parse it as command-line arguments or DSVs, as well as to compose usage instructions. The resulting deserialization wouldn't be as nice as that of e.g. optparse-generic, but the aim here is to handle more or less arbitrary types.

Example

An example is available in examples/Basic.hs. Given the following Haskell value:

Input { something = Nothing
      , fooBar = Just (Foo (FooArgs { arg1 = 1
                                    , arg2 = "a string"}))
      , fooBar2 = Bar}

Its serialized version with the default options is:

input nothing just foo fooargs 1 "a string" bar

And its usage string:

input [--something] (nothing | just STRING) [--foobar] (nothing | just (foo fooargs [--arg1] INT [--arg2] STRING | bar)) [--foobar2] (foo fooargs [--arg1] INT [--arg2] STRING | bar)

Other versions can be produced by varying selector name policy. Below are triples of a policy, a corresponding example serialization, and an example usage string (output of the help function from the example):

SNDisable
test : 1 : 2 : 3 [] just "a string"
test ([] | : INT ([] | :...)) (nothing | just STRING)
SNDisable
test : 1 : 2 : 3 [] nothing
test ([] | : INT ([] | :...)) (nothing | just STRING)
SNAvoid
test : 1 : 2 : 3 [] just "a string"
test [--foo] ([] | : INT ([] | :...)) [--bar] (nothing | just STRING)
SNAvoid
test : 1 : 2 : 3 [] nothing
test [--foo] ([] | : INT ([] | :...)) [--bar] (nothing | just STRING)
SNPrefer
test --foo : 1 : 2 : 3 [] --bar just "a string"
test [--foo] ([] | : INT ([] | :...)) [--bar] (nothing | just STRING)
SNPrefer
test --foo : 1 : 2 : 3 [] --bar nothing
test [--foo] ([] | : INT ([] | :...)) [--bar] (nothing | just STRING)
SNRequire
test --foo : 1 : 2 : 3 [] --bar just "a string"
test --foo ([] | : INT ([] | :...)) --bar (nothing | just STRING)
SNRequire
test --foo : 1 : 2 : 3 [] --bar nothing
test --foo ([] | : INT ([] | :...)) --bar (nothing | just STRING)
Metadata

Version

0.2.0.0

Platforms (75)

    Darwin
    FreeBSD
    Genode
    GHCJS
    Linux
    MMIXware
    NetBSD
    none
    OpenBSD
    Redox
    Solaris
    WASI
    Windows
Show all
  • aarch64-darwin
  • aarch64-genode
  • aarch64-linux
  • aarch64-netbsd
  • aarch64-none
  • aarch64_be-none
  • arm-none
  • armv5tel-linux
  • armv6l-linux
  • armv6l-netbsd
  • armv6l-none
  • armv7a-darwin
  • armv7a-linux
  • armv7a-netbsd
  • armv7l-linux
  • armv7l-netbsd
  • avr-none
  • i686-cygwin
  • i686-darwin
  • i686-freebsd
  • i686-genode
  • i686-linux
  • i686-netbsd
  • i686-none
  • i686-openbsd
  • i686-windows
  • javascript-ghcjs
  • loongarch64-linux
  • m68k-linux
  • m68k-netbsd
  • m68k-none
  • microblaze-linux
  • microblaze-none
  • microblazeel-linux
  • microblazeel-none
  • mips-linux
  • mips-none
  • mips64-linux
  • mips64-none
  • mips64el-linux
  • mipsel-linux
  • mipsel-netbsd
  • mmix-mmixware
  • msp430-none
  • or1k-none
  • powerpc-netbsd
  • powerpc-none
  • powerpc64-linux
  • powerpc64le-linux
  • powerpcle-none
  • riscv32-linux
  • riscv32-netbsd
  • riscv32-none
  • riscv64-linux
  • riscv64-netbsd
  • riscv64-none
  • rx-none
  • s390-linux
  • s390-none
  • s390x-linux
  • s390x-none
  • vc4-none
  • wasm32-wasi
  • wasm64-wasi
  • x86_64-cygwin
  • x86_64-darwin
  • x86_64-freebsd
  • x86_64-genode
  • x86_64-linux
  • x86_64-netbsd
  • x86_64-none
  • x86_64-openbsd
  • x86_64-redox
  • x86_64-solaris
  • x86_64-windows