Skip to main content

🐈 Felis Catus – functional bits for Python

Project description

🐈 Felis Catus

Felis Catus is your taxonomic nomenclature, an endothermic quadruped, carnivorous by nature; your visual, olfactory, and auditory senses contribute to your hunting skills and natural defenses. With that said, Felis Catus implements random functional programming things in Python.

Installation

Install from PyPI:

pip install felis-catus

Build and install from source:

pip install git+https://github.com/LeeeeT/felis

Examples

Currying and uncurrying functions with felis.currying:

from felis.currying import curry, uncurry


@curry
@curry
def curried(a: int, b: str, c: bool) -> None:
    pass


uncurried = uncurry(uncurry(curried))


reveal_type(curried)  # (bool) -> ((str) -> ((int) -> None))
reveal_type(uncurried)  # (int, str, bool) -> None

Safe error handling with felis.either:

from felis import either


safe_int = either.catch(ValueError)(int)


@either.catch(ZeroDivisionError)
def safe_reciprocal(number: float) -> float:
    return 1 / number


safe_reciprocal_of_str = either.compose(safe_reciprocal)(safe_int)


match safe_reciprocal_of_str(input("Enter a number: ")):
    case either.Left(error):
        print(f"Error: {error}")
    case either.Right(reciprocal):
        print(f"Reciprocal: {reciprocal}")

Managing IO (or any other lazy computations) with felis.lazy:

from felis.lazy import bind, take_after

main = \
    take_after(lambda: print("What's your name?"))(
    bind(input)(lambda name:
    lambda: print(f"Hi, {name}!")
))

main()

Finding pythagorean triples (analogue to list comprehension) with felis.list:

from felis.list import bind, guard, identity, range, take_after

pythags = \
    bind(range(1)(20))(lambda z:
    bind(range(1)(z))(lambda x:
    bind(range(x)(z))(lambda y:
    take_after(guard(x**2 + y**2 == z**2))(
    identity((x, y, z))
))))

print(pythags)
# [(3, 4, 5), (6, 8, 10), (5, 12, 13), (9, 12, 15), (8, 15, 17)]

Parsing a list of natural numbers from a string with felis.parser:

from felis.parser import bracket, digit, map, run, separated, some, text

natural = map(int)(map("".join)(some(digit)))

naturals_without_brackets = separated(text(", "))(natural)

naturals_with_brackets = bracket(text("["))(text("]"))(naturals_without_brackets)

string = "[12, 345, 6789]"

result = run(naturals_with_brackets)(string)

print(result)  # Some(value=[12, 345, 6789])

That's all monads, btw. 🐈

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

felis_catus-0.dev4.tar.gz (16.6 kB view details)

Uploaded Source

Built Distribution

felis_catus-0.dev4-py3-none-any.whl (28.6 kB view details)

Uploaded Python 3

File details

Details for the file felis_catus-0.dev4.tar.gz.

File metadata

  • Download URL: felis_catus-0.dev4.tar.gz
  • Upload date:
  • Size: 16.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.1 CPython/3.12.6

File hashes

Hashes for felis_catus-0.dev4.tar.gz
Algorithm Hash digest
SHA256 1464af8592eab632a33540f99a2ec6ba3ecbe71d943f251f452f0287446ec048
MD5 ffd30cadbdb636a43d4af1dfe069c952
BLAKE2b-256 edb5ebab0b1e123442f1382807894f4e075c62ec221f76ab9f9cc83e90e3fc28

See more details on using hashes here.

File details

Details for the file felis_catus-0.dev4-py3-none-any.whl.

File metadata

  • Download URL: felis_catus-0.dev4-py3-none-any.whl
  • Upload date:
  • Size: 28.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.1 CPython/3.12.6

File hashes

Hashes for felis_catus-0.dev4-py3-none-any.whl
Algorithm Hash digest
SHA256 c58abe31fff057e2ec30f9f8730e83e5c00a64144b59d3757275e4e66c97cbf3
MD5 67fb95591799eefec8121568f992613e
BLAKE2b-256 1fbc87004dde293292fd42d4ac3728b8cf7f8d736cc6aa4b67c54390d79430f6

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page