MyNixOS website logo
Description

Non-empty difference lists.

Difference lists are a list-like type supporting O(1) append. This is particularly useful for efficient logging and pretty printing (e.g. with the Writer monad), where list append quickly becomes too expensive.

DList a         ≅ [a] -> [a]
NonEmptyDList a ≅ [a] -> NonEmpty a

For empty variant, DList, see dlist package.

Difference Lists in Haskell

The NonEmpty version of difference lists: list-like type supporting O(1) append ans snoc operations.

This is a fork of a dlist package.

benchmarking right-append/List
time                 13.63 ms   (13.36 ms .. 14.04 ms)
                     0.997 R²   (0.994 R² .. 0.999 R²)
mean                 13.60 ms   (13.49 ms .. 13.76 ms)
std dev              332.4 μs   (240.8 μs .. 409.5 μs)

benchmarking right-append/NonEmpty
time                 31.87 ms   (25.83 ms .. 35.97 ms)
                     0.927 R²   (0.890 R² .. 0.969 R²)
mean                 23.76 ms   (21.98 ms .. 26.23 ms)
std dev              4.648 ms   (3.053 ms .. 5.538 ms)
variance introduced by outliers: 78% (severely inflated)

benchmarking right-append/DList
time                 38.18 μs   (38.09 μs .. 38.32 μs)
                     1.000 R²   (0.999 R² .. 1.000 R²)
mean                 38.18 μs   (38.03 μs .. 38.46 μs)
std dev              667.8 ns   (325.0 ns .. 1.164 μs)
variance introduced by outliers: 13% (moderately inflated)

benchmarking right-append/NonEmptyDList
time                 33.58 μs   (33.30 μs .. 33.89 μs)
                     0.999 R²   (0.999 R² .. 1.000 R²)
mean                 33.86 μs   (33.67 μs .. 34.14 μs)
std dev              801.9 ns   (616.6 ns .. 1.240 μs)
variance introduced by outliers: 22% (moderately inflated)

benchmarking right-append/DNonEmpty
time                 79.79 μs   (79.60 μs .. 80.10 μs)
                     1.000 R²   (1.000 R² .. 1.000 R²)
mean                 80.52 μs   (80.23 μs .. 80.92 μs)
std dev              1.162 μs   (757.0 ns .. 1.795 μs)
Metadata

Version

0.1.3

Platforms (77)

    Darwin
    FreeBSD
    Genode
    GHCJS
    Linux
    MMIXware
    NetBSD
    none
    OpenBSD
    Redox
    Solaris
    WASI
    Windows
Show all
  • aarch64-darwin
  • aarch64-freebsd
  • aarch64-genode
  • aarch64-linux
  • aarch64-netbsd
  • aarch64-none
  • aarch64-windows
  • 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