diff --git a/README.md b/README.md
index 59bb54c..149b861 100644
--- a/README.md
+++ b/README.md
@@ -24,3 +24,73 @@ result.isErr() // true
None == None() // true
```
+## Documentation
+
+### curry
+> (* -> a) -> (* -> a)
+
+Returns a curried equivalent of the provided function.
+
+```js
+import { curry } from './curry.js'
+
+const add = (a, b, c) => a + b + c
+const curriedAdd = curry(add)
+const add1 = curriedAdd(1)
+const add3 = add1(2)
+const add4 = curriedAdd(2, 2)
+
+const six = add3(3) // 6
+const eight = add4(2) // 7
+const twelve = curriedAdd(4, 4, 4) // 12
+```
+
+### Option
+
+Represents a value which may not exist.
+
+#### Methods
+##### of :: Option m => m a ~> (a -> m b) -> m b
+> Option.of\(value: a) -> Option\
+
+##### zero :: Option f => () -> f a
+> Option.zero\(value: a) -> Option\
+
+##### chain :: Option m => m a ~> (a -> m b) -> m b
+> Option\.chain\(fn: (value: T) -> Option) -> Option\
+
+##### map :: Option f => f a ~> (a -> b) -> f b
+> Option\.map\(fn: (value: T) -> U) -> Option\
+
+##### alt :: Option f => f a ~> f a -> f a
+> Option\.alt(other: Option\) -> Option\
+
+##### fold :: Option f => f a ~> ((b, a) -> b, b) -> b
+> Option\.fold\(fn: ((acc: U, value: T) -> U, initial: U) -> U) -> U
+
+### Result
+
+Represents a value which may fail.
+
+#### Methods
+##### of :: Result m => m a ~> (a -> m b) -> m b
+> Result.of\(value: a) -> Result\
+
+##### zero :: Result f => () -> f a
+> Result.zero() -> Result\<(), ()\>
+
+##### chain :: Result m => m a ~> (a -> m b) -> m b
+> Result\.chain\(fn: (value: T) -> Result) -> Result\
+
+##### map :: Result f => f a ~> (a -> b) -> f b
+> Result\.map\(fn: (value: T) -> U) -> Result\
+
+##### alt :: Result f => f a ~> f a -> f a
+> Result\.alt(other: Result\) -> Result\
+
+##### fold :: Result f => f a ~> ((b, a) -> b, b) -> b
+> Result\.fold\(fn: ((acc: U, value: T) -> U, initial: U) -> U) -> U
+
+##### bimap :: Result f => f a c ~> (a -> b, c -> d) -> f b d
+> Result\.bimap\(x: (value: T1) -> T2, y: (error: E1) -> E2) -> Result\
+