Ø is an attempt to re-implement some of the code from Learn You a Haskell for Great Good! in Python 3.4. The project currently contains implementations for:
- Functor
- Applicative
- Monoid
- Monad
- Maybe (Just | Nothing)
- Either (Right | Left)
- List
- IO Action
- Writer
Yes, I know there are other projects out there like PyMonad, but I'm simply doing 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 OSlash? OSlash is the Norwegian character called Oslash. 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.
Haskell:
> fmap (+3) (Just 2)
Just 5
> (+3) <$> (Just 2)
Just 5
Python:
>>> Just(2).fmap(lambda x: x+3)
Just 5
>>> (lambda x: x+3) % Just(2)
Just 5
IO Actions:
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()
Please take a look at the Functors, Applicatives, And Monads In Pictures in Python. It's a translation of the excellent Functors, Applicatives, And Monads In Pictures in Haskell.