← Learning

FP Concepts and Skills Associated with Them

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