A set of practical monads implemented in TypeScript, with the goal of being easy to learn and use in daily work.
Install with Yarn:
yarn add monadism
Or with npm:
npm i monadism
Then, import ES-module style:
import {Just, Nothing, maybe} from 'monadism'
Or, via require
:
const {Just, Nothing, maybe} = require('monadism')
- Maybe
- Represent optional values (A) without
null
orundefined
.
- Represent optional values (A) without
- Either
- A value that can be either the type on the Left, or the type on the Right.
- State
- A Monad which can be used to model a single piece of mutable state (S).
- Reader
- A computation with a return value (A) which can read values from a shared environment (E).
- Writer
- Accumulate a secondary story (S) value alongside the return value (A) of a computation.
- Signal
- A lightweight FRP-like Monad heavily inspired by the Elm Signal.
- Ported from purescript-signal by Bodil Stokke.
Monadism builds on the inspiration of a variety of different projects. Check them out for a deep dive into things like category theory and different data structures!
- purescript-transformers - Monad and comonad transformers based on mtl.
- bs-abstract - Bucklescript interfaces and implementations for category theory and abstract algebra.
- fp-ts - A library for typed functional programming in TypeScript.
- TsMonad - Little monad library designed for TypeScript.
An example of a Mario game screen using Signals to manage user input and game state. Adapted from Michael Ficarra's example at https://github.com/michaelficarra/purescript-demo-mario
Play a live demo here!
Install dependencies with Yarn:
yarn
Or with npm:
npm i
To build changes to the TypeScript code:
yarn build
To build in watch mode:
yarn build.wach
To build the docs:
yarn build.docs