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

This version

0.5.8

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

Uploaded Source

Built Distribution

haskellian-0.5.8-py3-none-any.whl (33.8 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: haskellian-0.5.8.tar.gz
  • Upload date:
  • Size: 20.2 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.8.tar.gz
Algorithm Hash digest
SHA256 0291abd34121b8e44100a3a1f3afe7925de1d6dffd529a4096dcce71839caa27
MD5 d3e58e0887f5b8225a39810a7a493d0a
BLAKE2b-256 4fbfb2523e0847e89e71ee50fb95df5f94b24d29d2459b58300bd597f2a2b467

See more details on using hashes here.

File details

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

File metadata

  • Download URL: haskellian-0.5.8-py3-none-any.whl
  • Upload date:
  • Size: 33.8 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.8-py3-none-any.whl
Algorithm Hash digest
SHA256 1c489ab11676087a7dcdbf55aad8dbd38930bc71ce960fe37c9d4e690b022d0a
MD5 d7733b24a6b7a96fe82e8cd3bf1da7f5
BLAKE2b-256 5ab2fc43a0290ac2e6a864937d126a5ef6c4a55f521f06a4d40ac70c47aca9fd

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