MyNixOS website logo
Description

A modern indexed monad stack.

Please see README.md.

Stacked

The modern indexed monad stack

Stacked is an indexed monad (see e.g.this description by Conor McBride) library built from the ground up to use modern GHC features (such as qualified do and quantified constraints).

For instance

  • The monad hierarchy follows that of base with for instance Applicative and Monad. These don't use distinctive names IxApplicative, IxMonad, or ixBind: they use the standard Applicative, Monad, and (>>=) names from base, and are meant to be imported qualified, and typically use with the qualified do notation.
  • But there is no indexed functor class defined in this library because, thanks to quantified constraints, the standard functor class suffices. The functor super-class for indexed applicative looks like (forall i j. Functor f i j) => …
  • We also take the opportunity of growing the stack from scratch to define a single Additive class to replace Alternative and MonadPlus. We then define Alternative as
    type Alternative m = (Applicative m, forall r r' a. Additive (m r r' a))
    
    Which uses both quantified constraints and impredicative types.

The library is meant to feel familiar to Haskell programmers, despite the clean-ups that modern Haskell affords.

Points of interest

  • Stacked has a rich sublibrary on continuation indexed monads and their relation with delimited control. This part of the library was developed to serve the needs of the Pup library.
Metadata

Version

0.1.1

License

Platforms (78)

    Darwin
    FreeBSD
    Genode
    GHCJS
    Linux
    MMIXware
    NetBSD
    none
    OpenBSD
    Redox
    Solaris
    uefi
    WASI
    Windows
Show all
  • aarch64-darwin
  • aarch64-freebsd
  • aarch64-genode
  • aarch64-linux
  • aarch64-netbsd
  • aarch64-none
  • aarch64-uefi
  • aarch64-windows
  • aarch64_be-none
  • arm-none
  • armv5tel-linux
  • armv6l-linux
  • armv6l-netbsd
  • armv6l-none
  • armv7a-linux
  • armv7a-netbsd
  • armv7l-linux
  • armv7l-netbsd
  • avr-none
  • i686-cygwin
  • 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-linux
  • 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-uefi
  • x86_64-windows