Commit | Line | Data |
---|---|---|
d45d190d SK |
1 | [![Build Status](https://travis-ci.org/ibnfirnas/hope.svg?branch=master)](https://travis-ci.org/ibnfirnas/hope) |
2 | ||
6903fabb | 3 | Higher Order Programming in Erlang |
a11ea326 SK |
4 | ================================== |
5 | ||
6 | A quest for a "standard" library with uniform, composable abstractions. | |
d2ab44d2 SK |
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 |