| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Name | Name | Last commit date | ||
|---|---|---|---|---|
OSlash (Ø) is a library for learning and understanding functional programming in Python 3.12+. It re-implements concepts from Learn You a Haskell for Great Good! using Python with modern type annotations. OSlash unifies functional and object-oriented paradigms by grouping related functions within classes. Objects are never used for storing values or mutable data; data exists only within function closures.
OSlash 1.0 is a complete modernization for Python 3.12+:
Type Safety: OSlash is fully type-checked with Pyright in strict mode, providing excellent IDE support and catching errors at development time. It leverages Python 3.12's PEP 695 type parameter syntax for clean, ergonomic generic types.
OSlash is intended to be a tutorial. For practical functional programming in Python in production environments you should consider using Expression instead.
# Using pip
pip install oslash
# Or using uv (recommended)
uv add oslashThe project currently contains implementations for:
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.
Haskell:
> fmap (+3) (Just 2)
Just 5
> (+3) <$> (Just 2)
Just 5Python:
>>> Just(2).map(lambda x: x+3)
Just 5
>>> (lambda x: x+3) % Just(2)
Just 5IO 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()| Back | FazBrowse Home | New Git URL |