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.10.tar.gz (20.1 kB view details)

Uploaded Source

Built Distribution

haskellian-0.5.10-py3-none-any.whl (33.7 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: haskellian-0.5.10.tar.gz
  • Upload date:
  • Size: 20.1 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.10.tar.gz
Algorithm Hash digest
SHA256 9505494712056037d2a8333c80c86e408ab1e70fd14ba98701c2ac4d829ed684
MD5 fd34af874324ac1cadd0dce41cdcce9f
BLAKE2b-256 1ae4bb89f87b442af4b8a7c944ec4fe2750697915ef481959ec97d516de21f04

See more details on using hashes here.

File details

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

File metadata

  • Download URL: haskellian-0.5.10-py3-none-any.whl
  • Upload date:
  • Size: 33.7 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.10-py3-none-any.whl
Algorithm Hash digest
SHA256 09d4bdb9670208a841a030f64ff18c9f1db22427e0ef200c965469a467ae5129
MD5 49f53fec69fb86d8595606333b5ffab9
BLAKE2b-256 67be636148a85121332550a99f8070d243b71f62a6b3672df055637d62971dcc

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