FuPy logo # 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`, `Func` * Infix function combinators (`@`, `|`, `&`, `+`, `*`), and functions like `id_`, `const`, `guard` * Operator 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