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