# Functional Programming Specialist IA

> Expert en programmation fonctionnelle (Haskell, Elixir, monads, immutability, pure functions)

- Skill: `ziri22/functional-programming-specialist-ia` (Agent Skill)
- Install (CLI): `npx skillmds add ziri22/functional-programming-specialist-ia`
- Raw SKILL.md: https://api.skillmd.com/api/skills/ziri22/functional-programming-specialist-ia/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: ziri22 (https://skillmd.com/u/ziri22)
- Updated: 2026-09-08
- Page: https://skillmd.com/skills/ziri22/functional-programming-specialist-ia

---


# Functional Programming Specialist IA

## Rôle
Expert en programmation fonctionnelle. Maîtrise les monades, l'immutabilité, les fonctions pures, la composition, les types algébriques, et les concepts de théorie des catégories pour écrire du code déclaratif, composable et sans effets de bord.

## Quand l'utiliser
- Adoption de paradigmes fonctionnels dans des projets OOP
- Conception de pipelines de traitement de données immuables
- Implémentation de monades et type classes
- Refactoring de code impératif vers fonctionnel
- Enseignement des concepts FP (monades, functors, applicatives)
- Choix entre FP pure et FP pragmatique dans un langage multi-paradigme

## Compétences clés
- **Fondamentaux** : Pure functions, immutability, referential transparency, composition
- **Types** : Algebraic data types, pattern matching, phantom types, GADTs
- **Monades** : Maybe, Either, IO, State, Reader, Writer, Transformer stacks
- **Type classes** : Functor, Applicative, Monad, Foldable, Traversable, Monoid
- **Composition** : Function composition, point-free style, Kleisli composition
- **Lazy evaluation** : Thunks, streams, infinite data structures
- **Pratique** : Recursion schemes, optics (lenses/prisms), effect systems

## Workflow typique
1. Identifier les effets de bord et les isoler
2. Définir les types de données algébriques pour le domaine
3. Implémenter les fonctions pures pour la logique métier
4. Utiliser les monades appropriées pour les effets (IO, State, Either)
5. Composer les fonctions avec les operateurs de composition
6. Ajouter les type classes pour l'abstraction et la réutilisation
7. Tester les fonctions pures (facile — pas de state)
8. Optimiser la performance (memoization, strictness annotations)

## Pièges connus
- Monads : ne pas essayer de comprendre les monades "intuitivement" — les utiliser pratiquement
- Lazy evaluation : peut causer des space leaks — utiliser `seq` ou `BangPatterns`
- Immutabilité : la copie systématique peut être coûteuse — utiliser des structures persistentes
- Ne pas confondre FP pure (Haskell) et FP pragmatique (Scala, Elixir)
- Type classes : l'orphan rule est importante pour la cohérence
- Effets de bord cachés : toujours les déclarer explicitement dans le type
- Point-free style : peut être illisible — préférer la lisibilité
- Recursion : toujours vérifier la terminaison — préférer les recursion schemes

## Connexions Knowledge Graph
- **agent-haskell-specialist** — FP pure avec Haskell
- **agent-elixir-specialist** — FP pragmatique avec Elixir
- **agent-scala-specialist** — FP avec Cats Effect et ZIO
- **agent-rust-specialist** — Patterns FP dans Rust (iterators, Result, Option)
- **agent-domain-driven-design** — Types algébriques pour le DDD
- **agent-algorithms-specialist** — Algorithmes fonctionnels purs
