Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
an approach to coding higher-order functions
Python Shell
branch: master

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
docs
fx
requirements
tests
.gitignore
.hgignore
.hgtags
LICENSE
MANIFEST.in
Makefile
README.rst
setup.cfg
setup.py
tox.ini

README.rst

fx - a functional programming approach

 ___
|  _|_ _
|  _|_'_|
|_| |_,_|igher-order function coding.

Introduction

TL;DR - YAGNI.

Inspired by Haskell's rich set of operators, this is an approach to functional programming with operators in Python.

"It's fun... It's insane... It's insanely fun."

—John Doe

Features

  • Currying functions with <<, &
  • Piping output of functions with |
  • Composing functions with **
  • Flipping order of arguments of function with ~
  • and more

Examples

>>> from fx import f
>>> double_all = f(map) << 2 .__mul__ | list
>>> double_all([1, 2, 3])
[2, 4, 6]
>>> double_all |= f(map) << str | ' '.join
>>> double_all([1, 2, 3])
'2 4 6'
>>> sum_upto = 1 .__add__ | f(range) << 1 | sum
>>> sum_upto(100)
5050
>>> parse_hex_str = ~f(int) << 16
>>> parse_hex_str('ff')
255
>>> parse_hex_str('c0ffee')
12648430
>>> # project euler problem 1
>>> euler_p1 = f(range) << 1 | f(filter) << (lambda n: n % 3 == 0 or n % 5 == 0) | sum
>>> euler_p1(10)
23
>>> euler_p1(1000)
233168
>>> # project euler problem 20
>>> fact = f(lambda n: 1 if n == 1 else n * fact(n - 1))
>>> euler_p20 = str ** fact | sum ** f(map) << int
>>> euler_p20(10)
27
>>> euler_p20(100)
648

Requirements

  • CPython >= 2.6

Installation

Install from PyPI:

pip install fx

Install from source, download source package, decompress, then cd into source directory, run:

make install

License

BSD New, see LICENSE for details.

Links

Documentation:
http://fx.readthedocs.org/
Issue Tracker:
https://bitbucket.org/pyx/fx/issues/
Source Package @ PyPI:
http://pypi.python.org/pypi/fx/
Mercurial Repository @ bitbucket:
https://bitbucket.org/pyx/fx/
Git Repository @ Github:
https://github.com/pyx/fx/
Something went wrong with that request. Please try again.