| 1 | [![Build Status](https://travis-ci.org/ibnfirnas/hope.svg?branch=master)](https://travis-ci.org/ibnfirnas/hope) |
| 2 | |
| 3 | Higher Order Programming in Erlang |
| 4 | ================================== |
| 5 | |
| 6 | A quest for a "standard" library with uniform, composable abstractions. |
| 7 | |
| 8 | |
| 9 | Monads |
| 10 | ------ |
| 11 | |
| 12 | Defined in `hope_gen_monad`, implemented as: |
| 13 | |
| 14 | - `hope_result`: for composition of common functions returning |
| 15 | `{ok, Val} | {error, Reason}`. An alternative to exceptions, which makes the |
| 16 | error conditions apparent in the spec/signature. Analogous to Haskell's |
| 17 | `Data.Either a b`, Jane Street Core's (OCaml) `('a, 'b) Result.t`, Rust's |
| 18 | `Result<T, E>` |
| 19 | - `hope_option`: for expressing and composing the intention that the value may |
| 20 | or may not be available. An alternative to the common `undefined` (which is |
| 21 | equivalent to the dreaded `null`). Analogous to ML's (SML, OCaml, etc) |
| 22 | `'a Option.t`, Rust's `Option<T>` and Haskell's `Data.Maybe a` [1]. |
| 23 | |
| 24 | |
| 25 | Containers |
| 26 | ---------- |
| 27 | |
| 28 | ### Dictionary |
| 29 | |
| 30 | Defined in `hope_gen_dictionary`, implemented as: |
| 31 | |
| 32 | - `hope_kv_list`. Equivalent to orddict/proplist. Operations implemented with |
| 33 | BIFs from `lists` module, where possible |
| 34 | |
| 35 | |
| 36 | [1]: http://en.wikipedia.org/wiki/Option_type |