Skip to main content

The functional programming library you need

Project description

Haskellian

The python functional programming library you need

pip install haskellian

Goals

  • 0 import time
  • Monadic, method chaining style
  • Great typing and overloads

Classes

Iter[A]

from haskellian import Iter, iter as I

@I.lift
def gen():
  for i in range(100000000000):
    yield i

gen() \
  .map(lambda x: 2*x) \
  .filter(lambda x: x % 2 == 0) \
  .batch(2) \
  .skip(1)
  #.sync() # don't recommend it...

# Iter([(4, 6), (8, 10), (12, 14), (16, 18), (20, 22), ...])

Either[L, R]

from haskellian import Either, either as E

def fetch_users() -> Either[str, list[str]]:
  ...

def fetch_user(id: str) -> Either[str, dict]:
  ...

def parse_user(user: dict) -> Either[str, User]:
  ...

@E.do()
def print_one():
  users = fetch_users().unsafe()
  raw_user = fetch_user(users[0]).unsafe()
  user = parse_user(raw_user).unsafe()
  print(user)

Explanation:

  • .unsafe() raises unwraps the value or raises an IsLeft exception
  • @E.do() wraps the function in a try...except IsLeft block, returning the possibly raised Left

Dict[A]

from haskellian import Dict

Dict({ 'a': 1, 'b': 2, 'c': 4 }) \
  .filter_v(lambda v: v % 2 == 0) \
  .evolve({ 'c': lambda x: -x })
  .map_v(lambda v: 2*v)

# Dict({ 'b': 4, 'c': -8 })

AsynIter[A]

from haskellian import AsynIter, asyn_iter as AI

@AI.lift
async def gen():
  for i in range(10):
    yield i

await gen() \
  .map(lambda x: 2*x) \
  .filter(lambda x: x % 2 == 0) \
  .batch(2) \
  .skip(1) \
  .sync()

Project details


Release history Release notifications | RSS feed

Download files

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

Source Distribution

haskellian-0.5.11.tar.gz (20.5 kB view details)

Uploaded Source

Built Distribution

haskellian-0.5.11-py3-none-any.whl (34.1 kB view details)

Uploaded Python 3

File details

Details for the file haskellian-0.5.11.tar.gz.

File metadata

  • Download URL: haskellian-0.5.11.tar.gz
  • Upload date:
  • Size: 20.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.11.10

File hashes

Hashes for haskellian-0.5.11.tar.gz
Algorithm Hash digest
SHA256 92b9b05e9f215642128e6f20985d8b0dd8a4f7a8f94e22c4a04ecd7ea285e74b
MD5 52f8af2f27d5c1221c483159685503d3
BLAKE2b-256 a117cf8a3de8c431ffc4889e829495d6d26832623826a08edb19922fd4ba5b23

See more details on using hashes here.

File details

Details for the file haskellian-0.5.11-py3-none-any.whl.

File metadata

  • Download URL: haskellian-0.5.11-py3-none-any.whl
  • Upload date:
  • Size: 34.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.11.10

File hashes

Hashes for haskellian-0.5.11-py3-none-any.whl
Algorithm Hash digest
SHA256 193c05051ad0fa4dd7af4ab687f0ba706596e8139b50c36b0b6e4745d20ba00d
MD5 1a9c39fea94dc07f09c44d5ceaca020f
BLAKE2b-256 7e7c59c8b714937e6c449b8a97bd4ef04a08f9024563604c55b884c75b060aa7

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