Functional Programming Best Practices
Quick Start
code
-- Prefer pure functions and immutable data let double = (x) -> x * 2 [1, 2, 3] /> map(double) /> filter((x) -> x > 2)
Core Principles
- •Immutability: Use
letby default,maybeonly when mutation is necessary - •Pure functions: No side effects, same input always produces same output
- •Composition: Build complex behavior from simple, composable functions
- •Higher-order functions: Pass functions as arguments, return functions
Lea-Specific Warnings
Lea differs from traditional FP languages:
- •No currying - Use placeholders:
5 /> add(3, input) - •Pipes prepend -
x /> fn(a)becomesfn(x, a) - •Mutable bindings -
maybeallows mutation; avoid unless necessary - •No monads - Async uses
#asyncdecorator instead - •Opt-in types - Add
:: Type :> ReturnType, use#strictfor enforcement
Notes
- •Prefer
letovermaybe - •Use pipelines (
/>) for left-to-right data flow - •Callbacks receive
(element, index)