<NME> README.md
<BEF> # Functors, Applicatives, And Monads in Python

Ø is an attempt to re-implement some of the code from 
[Learn You a Haskell for Great Good!](http://learnyouahaskell.com/) in
Python 3. The project currently contains implementations for:

## Abstract Base Classes


OSlash is intended to be a tutorial. For practical functional programming in Python in production environments you
 - Monoid
 - Monad

## Some Monads
 
 - Maybe (Just | Nothing)
 - Either (Right | Left)


Yes, I know there are other projects out there like 
[PyMonad](https://bitbucket.org/jason_delaat/pymonad/), but I'm simply doing 
this in order to better understand the book. It's much easier to learn if you
implement things yourself. The code may be similar to PyMonad in structure, but
is quite different in implementation.

Why is the project called Ø? Ø is the Norwegian character called 
[Oslash](http://en.wikipedia.org/wiki/Ø). Just want to check if it's possible 
to have a projects name that uses unicode characters.

- **>>**, for sequencing monadic actions
- **lift**, for mapping a function over monadic values
- **join**, for removing one level of monadic structure
- **compose**, for composing monadic functions

## Utility functions

- **compose**, for composing 0 to n functions

## But why?

Yes, I know there are other projects out there like [PyMonad](https://bitbucket.org/jason_delaat/pymonad/),
[fn.py](https://github.com/kachayev/fn.py). I'm simply doing this in order to better understand the
[book](http://learnyouahaskell.com/). It's so much easier to learn when you implement things yourself. The code may be
similar to PyMonad in structure, but is quite different in implementation.

Why is the project called OSlash? OSlash is the Norwegian character called [Oslash](http://en.wikipedia.org/wiki/Ø).
Initially I wanted to create a project that used Ø and ø (unicode) for the project name and modules. It didn't work out
well, so I renamed it to OSlash.

## Examples

Haskell:

```haskell
> fmap (+3) (Just 2)
Just 5

> (+3) <$> (Just 2)
Just 5
```

Python:

```python
>>> Just(2).map(lambda x: x+3)
Just 5

>>> (lambda x: x+3) % Just(2)
Just 5

```

IO Actions:

```python
from oslash import put_line, get_line

main = put_line("What is your name?") | (lambda _:
    get_line() | (lambda name:
    put_line("What is your age?") | (lambda _:
    get_line() | (lambda age:
    put_line("Hello " + name + "!") | (lambda _:
    put_line("You are " + age + " years old"))))))

if __name__ == "__main__":
    main()
```

## Tutorials

- [Functors, Applicatives, And Monads In Pictures](https://github.com/dbrattli/oslash/wiki/Functors,-Applicatives,-And-Monads-In-Pictures) in Python.
- [Three Useful Monads](https://github.com/dbrattli/OSlash/wiki/Three-Useful-Monads) _(in progress)_
- [Using Either monad in Python](https://medium.com/@rnesytov/using-either-monad-in-python-b6eac698dff5)

<MSG> Testing example

<DFF> @@ -2,7 +2,7 @@
 
 Ø is an attempt to re-implement some of the code from 
 [Learn You a Haskell for Great Good!](http://learnyouahaskell.com/) in
-Python 3. The project currently contains implementations for:
+Python 3.4. The project currently contains implementations for:
 
 ## Abstract Base Classes
 
@@ -11,7 +11,7 @@ Python 3. The project currently contains implementations for:
  - Monoid
  - Monad
 
-## Some Monads
+## And Some Monads
  
  - Maybe (Just | Nothing)
  - Either (Right | Left)
@@ -19,10 +19,22 @@ Python 3. The project currently contains implementations for:
 
 Yes, I know there are other projects out there like 
 [PyMonad](https://bitbucket.org/jason_delaat/pymonad/), but I'm simply doing 
-this in order to better understand the book. It's much easier to learn if you
-implement things yourself. The code may be similar to PyMonad in structure, but
-is quite different in implementation.
+this in order to better understand the book. It's so much easier to learn when 
+you implement things yourself. The code may be similar to PyMonad in structure, 
+but is quite different in implementation.
 
 Why is the project called Ø? Ø is the Norwegian character called 
 [Oslash](http://en.wikipedia.org/wiki/Ø). Just want to check if it's possible 
-to have a projects name that uses unicode characters.
\ No newline at end of file
+to have a projects name that uses unicode characters.
+
+## Examples
+
+```haskell
+> fmap (+3) (Just 2)
+Just 5
+```
+
+```python
+>>> Just(2).fmap(lambda x: x+3)
+Just 5
+```

Testing example