CONCEPTS
- Immutable Data
- Second-Order Functions
- Constructing & Destructuring
- Function Composition
- First-Class Functions & Lambdas
SKILLS
- Use second-order functions (map, filter, fold) on immutable data structures
- Destructure values to access their components
- Use data types to represent optionality
- Read basic type signatures
- Pass lambdas to second-order functions
CONCEPTS
- Generalized Algebraic Data Types
- Pattern Matching
- Parametric Polymorphism
- General Recursion
- Type Classes, Instances, & Laws
- Lower-Order Abstractions (Equal, Semigroup, Monoid, etc)
- Referential Transparency & Totality
- Higher-Order Functions
- Partial-Application, Currying. & Point-Free Style
SKILLS
- Solve problems without nulls, exceptions, or type casts
- Process & transform recursive data structures using recursion
- Able to use functional progromming in the small
- Write basic monadic code for a concrete monad
- Create type class instances for custom data types
- Model a business domain with ADTs
- Write functions that take and return functions
- Reliably identify & isolate pure code from Impure code
- Partial-Application, Currying, & Point-Free Style
- Avoid introducing unnecessary lambdas & named parameters
CONCEPTS
- Generalized Algebraic Data Types
- Higher-Kinded Types
- Rank-N Types
- Folds & Unfolds
- Higher-Order Abstractions (Category, Functor, Monad)
- Basic Optics
- Efficient Persistent Data Structures
- Existential Types
- Embedded DSLs using Combinators
SKILLS
- Able to use functional programming in the large
- Test code using generators and properties
- Write imperative code in a purely functional way through monocle
- Use popular purely functional libraries to solve business problems
- Separate decision from effects
- Write a simple custom lawful monad
- Write production medium-sized projects
- Use lenses & prisms to manipulate data
- Embedded ()Us using Combinators
- Simplify types by hiding Irrelevant data with existentials
CONCEPTS
- Codata
- (Co)Recursion Schemes
- Monad Transformers
- Free Monads & Extensible Effects
- Functional Architecture
- Advanced Functors (Exponential, Profunctors, Contravariont)
- Embedded DSLs using GADTs, Finally Togless
- Advanced Monads (Continuation, Logic)
- Type Families, Functional Dependencies
- Advanced Optics
- Dual Abstractions (Comonod)
SKILLS
- Design a minimally-powerful monad transformer stack
- Write concurrent and streaming programs
- Use purely functional mocking in tests
- Use type classes to modularly model different effects
- Recognize type patterns and abstract over them
- Use functional libraries In novel ways
- Use optics to manipulate state
- Write custom lawful monad transformers
- Use free monads / extensible effects to separate concerns
- Encode Invariants of the type level
- Effectively use FOB / type families to create safer code
CONCEPTS
- High-Performance
- Kind Polymorphism
- Generic Programming
- Type-Level Progromming
- Dependant-Types, Singleton Types
- Category Theory
- Graph Reduction
- Higher-Order Abstract Syntax
- Compiler Design for Functional languages
- Profunctor Optics
SKILLS
- Design a generic, lawful library with broad appeal
- Prove properties manually using equational reasoning
- Design & implement a new functional progromming language
- Create novel abstractions with lows
- Write distributed systems with certain guarantees
- Use proof systems to formally prove properties of code
- Create libraries that do not permit invalid states
- Use dependent-typing to prove more properties at compile-time
- Understand deep relationships between different concepts
- Profile, debug, & optimize purely functional code with minimal sacrifices
Note: This list was taken from Lambda Conf’s list