OSlash (Ø) for Python 3.8+
Functors, Applicatives, And Monads in Python
OSlash (Ø) is a library for playing with functional programming in Python 3.8+. It's an attempt to re-implement some of the code from Learn You a Haskell for Great Good! in Python 3.8. OSlash unifies functional and object oriented paradigms by grouping related functions within classes. Objects are however never used for storing values or mutable data, and data only lives within function closures.
OSlash is intended to be a tutorial. For practical functional programming in Python in production environments you should use FSlash instead.
> pip3 install oslash
The project currently contains implementations for:
Abstract Base Classes
- Functor, for stuff that can be mapped
- Applicative, for callable stuff
- Monoid, for associative stuff
- Monad, for monadic stuff
And Some Monads
- Identity, boxed stuff in its simplest form
- Maybe (Just | Nothing), for optional stuff
- Either (Right | Left), for possible failures
- List, purely functional list of stuff
- IO Action, for impure stuff
- Writer, for logging stuff
- Reader, for callable stuff
- State, for stateful computations of stuff
- Cont, for continuation of stuff
- >>, 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
- compose, for composing 0 to n functions
Yes, I know there are other projects out there like PyMonad, fn.py. 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.
> fmap (+3) (Just 2) Just 5 > (+3) <$> (Just 2) Just 5
>>> Just(2).map(lambda x: x+3) Just 5 >>> (lambda x: x+3) % Just(2) Just 5
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()
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
|Filename, size||File type||Python version||Upload date||Hashes|
|Filename, size OSlash-0.6.3-py3-none-any.whl (26.9 kB)||File type Wheel||Python version py3||Upload date||Hashes View|
|Filename, size OSlash-0.6.3.tar.gz (35.2 kB)||File type Source||Python version None||Upload date||Hashes View|