Design Considerations
Design considerations of FuPy:
Stay close to the mathematical theory of functional programming
many operators are uncurried functions
Allow interoperability with “normal” Python
use readable identifiers
auto (un)packing of function arguments
Printable functions, including lambda expressions
Traceable evaluation
Lazy evaluation
Functionality:
Basic Types:
Empty,Unit,Either,Both,FuncInfix function combinators (
@,|,&,+,*), and functions likeid_,const,guardOperator sections
Fixpoint types and fixpoint values, with their catamorphisms and anamorphisms
Tensions
Mathematical theory of FP and its notation and terminology
functions take only one argument
prefers uncurried operators
predefined function combinators (in particular, split and case)
Python notation and terminology
no/multi-argument functions
Haskell notation and terminology
functions take only one argument
prefers curried operators
implicit functors
LaTeX macro names