Skip to content

Commit

Permalink
Added Contracts (#127)
Browse files Browse the repository at this point in the history
* Added description of contracts

* Added ES6 example

* linted and toc
  • Loading branch information
nickzuber authored and jethrolarson committed Dec 20, 2016
1 parent eceef75 commit b77effb
Showing 1 changed file with 16 additions and 1 deletion.
17 changes: 16 additions & 1 deletion readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@ __Table of Contents__
* [Value](#value)
* [Constant](#constant)
* [Functor](#functor)
* [Preserves identity](#preserves-identity)
* [Composable](#composable)
* [Pointed Functor](#pointed-functor)
* [Lift](#lift)
* [Referential Transparency](#referential-transparency)
Expand Down Expand Up @@ -270,7 +272,20 @@ const predicate = (a) => a > 2

## Contracts

TODO
A contract specifies the obligations and guarentees of the behavior from a function or expression at runtime. This acts as a set of rules that are expected from the input and output of a function or expression, and errors are generally reported whenever a contract is violated.

```js
// Define our contract : int -> int
const contract = (input) => {
if (typeof input === 'number') return true
throw new Error('Contract violated: expected int -> int')
}

const addOne = (num) => contract(num) && num + 1

addOne(2) // 3
addOne('some string') // Contract violated: expected int -> int
```

## Guarded Functions

Expand Down

0 comments on commit b77effb

Please sign in to comment.