MyNixOS website logo
Description

Fill-in-the-blanks - A library factoring out substitution from ASTs.

Please see the README on GitHub at https://github.com/ejconlon/blanks#readme

blanks

CircleCI

Fill-in-the-blanks - A library factoring out substitution from ASTs.

It's a pain to track de Bruijn indices yourself to implement capture-avoiding subsititution, so this library provides some wrappers that help. One of the best libraries for this is bound, which uses a clever representation to make these operations safe and fast. The tradeoff is that you have to define a Monad instance for your expression functor, which in practice can be tricky. (It's even trickier to derive Eq and Show!)

This library takes the simpler, slower, and rather "succ-y" free-monad-ish approach, but with a twist. It expects you to rewrite all name-binding constructors in your expression as annotations on a single "binder" constructor. This allows you to use the provided Scope type (or a variant) as a wrapper around your expression functor, which is only required to implement Functor. This representation is less safe (since you can inspect and manipulate bound variables), but if you stick to the provided combinators, things will work out fine.

You'll get most of what you want by just importing this module unqualified. See Scope for the basic wrapper and LocScope for a wrapper with annotations you can use for source locations and the like. See the test suite for examples.

Metadata

Version

0.5.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