sum : Additive a => List a -> a
Somme d'une liste (0 pour la liste vide).
import nécessaire.sum : Additive a => List a -> aproduct : Multiplicative a => List a -> aelem : Eq a => a -> List a -> Boolany : (a -> Bool) -> List a -> Boolall : (a -> Bool) -> List a -> Booltake : Nat -> List a -> List adrop : Nat -> List a -> List atakeWhile : (a -> Bool) -> List a -> List adropWhile : (a -> Bool) -> List a -> List aconcat : List (List a) -> List aindex : Nat -> List a -> Maybe azip : List a -> List b -> List (a, b)zipWith : (a -> b -> c) -> List a -> List b -> List crange : Int -> Int -> List IntrangeDown : Int -> Int -> List Int -> List IntapplyTimes : (a -> a) -> Nat -> a -> ainterface Enum a whereenumNatDown : Nat -> Nat -> List Nat -> List NatenumFromToExcl : Ord a => Enum a => a -> a -> List aenumFromToExclAcc : Ord a => Enum a => a -> a -> List a -> List arangeStepZeroMessage : StringenumNoStepDownMessage : StringenumFromThenTo : Ord a => Enum a => a -> a -> a -> List aenumFromThenToExcl : Ord a => Enum a => a -> a -> a -> List aenumStepAcc : Enum a => a -> Nat -> Nat -> Bool -> Bool -> Nat -> List a -> List aelemBy : (a -> a -> Bool) -> a -> List a -> BoolconcatMap : (a -> List b) -> List a -> List binsertOrd : Ord a => a -> List a -> List asort : Ord a => List a -> List areplicate : Nat -> a -> List alookup : Eq k => k -> List (k, v) -> Maybe vmaximum : Ord a => List a -> Maybe amaxFrom : Ord a => a -> List a -> aminimum : Ord a => List a -> Maybe aminFrom : Ord a => a -> List a -> amapMaybe : (a -> Maybe b) -> List a -> List bcatMaybes : List (Maybe a) -> List alast' : List a -> Maybe aintersperse : a -> List a -> List aintercalate : Monoid m => m -> List m -> mjoinBy : String -> List String -> Stringlowercase : String -> Stringtrim : String -> StringtrimList : List Char -> List ChardropSpace : List Char -> List Charfind : (a -> Bool) -> List a -> Maybe afindIndexFrom : Nat -> (a -> Bool) -> List a -> Maybe NatfindIndex : (a -> Bool) -> List a -> Maybe NatelemIndex : Eq a => a -> List a -> Maybe Natpartition : (a -> Bool) -> List a -> (List a, List a)span : (a -> Bool) -> List a -> (List a, List a)break : (a -> Bool) -> List a -> (List a, List a)insertBy : (a -> a -> Ordering) -> a -> List a -> List asortBy : (a -> a -> Ordering) -> List a -> List asortOn : Ord b => (a -> b) -> List a -> List anubBy : (a -> a -> Bool) -> List a -> List anub : Eq a => List a -> List agroupBy : (a -> a -> Bool) -> List a -> List (List a)group : Eq a => List a -> List (List a)scanl : (b -> a -> b) -> b -> List a -> List bscanr : (a -> b -> b) -> b -> List a -> List bzipWith3 : (a -> b -> c -> d) -> List a -> List b -> List c -> List dunfoldr : (b -> Maybe (a, b)) -> b -> List afoldl1 : (a -> a -> a) -> List a -> Maybe afoldr1 : (a -> a -> a) -> List a -> Maybe ainit' : List a -> Maybe (List a)tails : List a -> List (List a)isPrefixOf : Eq a => List a -> List a -> BoolisSuffixOf : Eq a => List a -> List a -> BoolisInfixOf : Eq a => List a -> List a -> BoolisSpaceChar : Char -> BoolwordsCs : List Char -> List (List Char)words : String -> List StringlinesCs : List Char -> List (List Char)lines : String -> List StringsplitCs : Char -> List Char -> List (List Char)splitOnChar : Char -> String -> List StringisJust : Maybe a -> BoolisNothing : Maybe a -> BoollistToMaybe : List a -> Maybe amaybeToList : Maybe a -> List aisLeft : Either a b -> BoolisRight : Either a b -> BoolfromLeft : a -> Either a b -> afromRight : b -> Either a b -> blefts : List (Either a b) -> List arights : List (Either a b) -> List bpartitionEithers : List (Either a b) -> (List a, List b)sum : Additive a => List a -> a
Somme d'une liste (0 pour la liste vide).
product : Multiplicative a => List a -> a
Produit d'une liste (1 pour la liste vide).
elem : Eq a => a -> List a -> Bool
Une valeur est-elle un élément d'une liste ?
any : (a -> Bool) -> List a -> Bool
Au moins un élément satisfait-il le prédicat ?
all : (a -> Bool) -> List a -> Bool
Tous les éléments satisfont-ils le prédicat ?
take : Nat -> List a -> List a
Les n premiers éléments (moins si la liste est plus courte). n : Nat, le même type de compte que length.
drop : Nat -> List a -> List a
Tous les éléments sauf les n premiers.
takeWhile : (a -> Bool) -> List a -> List a
Le plus long préfixe dont tous les éléments satisfont le prédicat.
dropWhile : (a -> Bool) -> List a -> List a
Le reste après suppression du plus long préfixe satisfaisant le prédicat (le pendant de takeWhile).
concat : List (List a) -> List a
index : Nat -> List a -> Maybe a
zip : List a -> List b -> List (a, b)
Associe les éléments de deux listes (en tronquant à la plus courte).
zipWith : (a -> b -> c) -> List a -> List b -> List c
Combine deux listes élément par élément avec une fonction.
range : Int -> Int -> List Int
Une liste d'entiers de lo à hi inclus (vide si lo > hi). [1 .. n] — l'idiome de plage comptée de la boucle for — ne déborde pas la pile pour un grand n.
rangeDown : Int -> Int -> List Int -> List Int
applyTimes : (a -> a) -> Nat -> a -> a
Applique f à x, n fois (f (f … (f x))). Sous-tend le pas par DÉFAUT ci-dessous, de sorte qu'un Enum nu (enumFromTo, succ, stepUp, stepDown) gère les plages à pas d'emblée.
interface Enum a where
enumFromTo : a -> a -> List a
succ : a -> a -- ^ the next value; lets `for x in [lo..hi]` count without a list
enumDist : a -> a -> Nat -- ^ PRE lo ≤ hi : count of unit steps from lo up to hi
succBy : a -> Nat -> a -- ^ advance UP by n unit steps
-- LÀ OÙ LE TYPE S'ARRÊTE (KB-200, 07/10/2026 : une plage sans borne, `[e ..]`
-- DÉFAUTS (Thomas, 07/10/2026 : l'`Enum` d'un TP doit continuer à compiler) disent
-- exactement ce que `succ` seul permet : MONTER va aussi loin que `succ` — une
-- rien n'existe dessous). À revoir : des bornes en interfaces (minBound,
stepUp : a -> Nat -> Maybe a -- ^ the value n unit steps UP, if the type has one
stepDown : a -> Nat -> Maybe a -- ^ the value n unit steps DOWN, if the type has one
Les types dont les valeurs s'énumèrent sur une plage bornée. Sous-tend la notation de plage [lo .. hi], qui se désucre en enumFromTo lo hi.
enumNatDown : Nat -> Nat -> List Nat -> List Nat
enumFromToExcl : Ord a => Enum a => a -> a -> List a
L'intervalle DEMI-OUVERT [lo, hi[ (ou [lo, hi)) : lo, succ lo, … jusqu'à hi EXCLU (D7). VIDE quand hi <= lo (convention de Dijkstra : la longueur vaut exactement hi - lo, [a .. a[ est vide, [0 .. k[ ++ [k .. n[ == [0 .. n[). L'énumérateur demi-ouvert PRIMITIF — PAS enumFromTo lo (pred hi) : la garde < hi n'a besoin d'aucun pred/soustraction, donc elle reste correcte à hi <= lo et marche pour TOUT Enum (Nat, Char…), pas seulement Int. Pile constante pour les grands intervalles.
enumFromToExclAcc : Ord a => Enum a => a -> a -> List a -> List a
rangeStepZeroMessage : String
enumNoStepDownMessage : String
enumFromThenTo : Ord a => Enum a => a -> a -> a -> List a
La plage À PAS [a, b .. c] (D8), INCLUANT c : a, puis chaque valeur un pas plus loin que la précédente, le pas étant b − a MONTRÉ par les deux termes. [1,3..11] = 1 3 5 7 9 11. La DIRECTION se lit sur a vs b (Ord), donc la descente est native — [10,8..0] = 10 8 6 4 2 0, et sur Nat [5,3..1] = 5 3 1 sans pas signé (jamais le piège de sous-débordement monus du d = b − a). Le pas 0 (b == a, une plage sans borne) est REFUSÉ : à la COMPILATION quand les deux premiers termes sont des littéraux, en erreur d'exécution propre sinon. Pile constante.
enumFromThenToExcl : Ord a => Enum a => a -> a -> a -> List a
La plage à pas demi-ouverte [a, b .. c[ (ou [a, b .. c)) (D8) : comme enumFromThenTo mais EXCLUANT c — [1,3..11[ = 1 3 5 7 9. Même règle de direction, même refus du pas 0, même pile constante.
enumStepAcc : Enum a => a -> Nat -> Nat -> Bool -> Bool -> Nat -> List a -> List a
elemBy : (a -> a -> Bool) -> a -> List a -> Bool
Un élément est-il présent, selon un test d'égalité fourni ? (Forme générale de elem, qui utilise ==.)
concatMap : (a -> List b) -> List a -> List b
Applique une fonction à valeurs de liste sur une liste puis concatène les résultats. concatMap f = concat . map f.
insertOrd : Ord a => a -> List a -> List a
Insère dans une liste triée en la gardant triée.
sort : Ord a => List a -> List a
Trie une liste par ordre croissant (tri par insertion).
replicate : Nat -> a -> List a
n copies d'une valeur. n : Nat.
lookup : Eq k => k -> List (k, v) -> Maybe v
Recherche une clé dans une liste d'association.
maximum : Ord a => List a -> Maybe a
Plus grand élément, ou Nothing si vide (totale).
maxFrom : Ord a => a -> List a -> a
minimum : Ord a => List a -> Maybe a
Plus petit élément, ou Nothing si vide (totale).
minFrom : Ord a => a -> List a -> a
mapMaybe : (a -> Maybe b) -> List a -> List b
Applique une fonction partielle à chaque élément, en gardant les succès. mapMaybe f xs = catMaybes (map f xs), mais en une seule passe.
catMaybes : List (Maybe a) -> List a
last' : List a -> Maybe a
Le dernier élément d'une liste, ou Nothing si elle est vide (total).
intersperse : a -> List a -> List a
Insère sep entre les éléments consécutifs d'une liste (ni en tête ni en fin). intersperse 0 [1, 2, 3] = [1, 0, 2, 0, 3]
intercalate : Monoid m => m -> List m -> m
Joint des valeurs monoïdes en insérant sep entre les éléments consécutifs (pas de séparateur final). intercalate sep = concat . intersperse sep. Généralise le Data.List.intercalate de Haskell à n'importe quel Monoid, donc sert aussi bien les chaînes que les listes de listes : intercalate ", " ["a", "b", "c"] = "a, b, c" intercalate [0] [[1], [2], [3]] = [1, 0, 2, 0, 3]
joinBy : String -> List String -> String
Joint une liste de chaînes avec sep entre elles (pas de séparateur final) — la face « chaîne » d'intercalate, nommée comme en Idris 2 (Data.String.joinBy) : joinBy "\n" ["a", "b"] = "a\nb"
lowercase : String -> String
Met chaque caractère d'une chaîne en minuscule.
trim : String -> String
Retire les espaces ASCII en début et en fin de chaîne.
trimList : List Char -> List Char
dropSpace : List Char -> List Char
find : (a -> Bool) -> List a -> Maybe a
Le premier élément satisfaisant le prédicat, ou Nothing.
findIndexFrom : Nat -> (a -> Bool) -> List a -> Maybe Nat
findIndex : (a -> Bool) -> List a -> Maybe Nat
L'indice (à partir de 0) du premier élément satisfaisant le prédicat.
elemIndex : Eq a => a -> List a -> Maybe Nat
L'indice (à partir de 0) de la première occurrence d'une valeur.
partition : (a -> Bool) -> List a -> (List a, List a)
Scinde en (éléments satisfaisant p, le reste), en préservant l'ordre.
span : (a -> Bool) -> List a -> (List a, List a)
(le plus long préfixe satisfaisant tous p, le reste) : span p = (takeWhile p, dropWhile p).
break : (a -> Bool) -> List a -> (List a, List a)
break p = span (not . p) : le préfixe jusqu'au premier élément satisfaisant p.
insertBy : (a -> a -> Ordering) -> a -> List a -> List a
sortBy : (a -> a -> Ordering) -> List a -> List a
Trie selon un comparateur fourni (tri par insertion stable). Forme générale de sort, qui utilise compare.
sortOn : Ord b => (a -> b) -> List a -> List a
Trie selon une projection sur une clé (décorer–trier–dédécorer) : chaque élément est apparié avec sa clé, les paires sont triées par clé, puis les clés sont abandonnées — de sorte que la fonction de clé est exécutée une fois par élément, et non à chaque comparaison. Le pendant par projection de sortBy (à la sortOn de Haskell/Idris, à la sort_by_key de Rust).
nubBy : (a -> a -> Bool) -> List a -> List a
Retire les doublons selon une égalité fournie, en gardant la première occurrence.
nub : Eq a => List a -> List a
Retire les doublons (par ==), en gardant la première occurrence.
groupBy : (a -> a -> Bool) -> List a -> List (List a)
Regroupe les éléments consécutifs jugés égaux par le prédicat.
group : Eq a => List a -> List (List a)
Regroupe les éléments consécutifs égaux (par ==) : group [1,1,2,3,3] = [[1,1],[2],[3,3]].
scanl : (b -> a -> b) -> b -> List a -> List b
Balayage à gauche : l'accumulateur courant après chaque étape, initialisé avec z. scanl (+) 0 [1,2,3] = [0,1,3,6] (toujours plus long d'un que l'entrée).
scanr : (a -> b -> b) -> b -> List a -> List b
Balayage à droite : scanr (+) 0 [1,2,3] = [6,5,3,0] (toujours non vide).
zipWith3 : (a -> b -> c -> d) -> List a -> List b -> List c -> List d
Combine trois listes avec une fonction (en tronquant à la plus courte).
unfoldr : (b -> Maybe (a, b)) -> b -> List a
Construit une liste à partir d'une graine : f renvoie Just (element, next seed) pour émettre, ou Nothing pour s'arrêter.
foldl1 : (a -> a -> a) -> List a -> Maybe a
Pli à gauche sur une liste NON vide, initialisé avec son premier élément ; Nothing pour la liste vide (totale).
foldr1 : (a -> a -> a) -> List a -> Maybe a
Pli à droite sur une liste NON vide ; Nothing pour la liste vide (totale).
init' : List a -> Maybe (List a)
tails : List a -> List (List a)
Tous les suffixes d'une liste, le plus long d'abord : tails [1,2] = [[1,2],[2],[]].
isPrefixOf : Eq a => List a -> List a -> Bool
La première liste est-elle un préfixe de la seconde ?
isSuffixOf : Eq a => List a -> List a -> Bool
La première liste est-elle un suffixe de la seconde ?
isInfixOf : Eq a => List a -> List a -> Bool
La première liste est-elle une sous-séquence contiguë de la seconde ?
isSpaceChar : Char -> Bool
wordsCs : List Char -> List (List Char)
words : String -> List String
Découpe une chaîne en mots sur les suites d'espaces (pas de mots vides). words " a b " = ["a", "b"].
linesCs : List Char -> List (List Char)
lines : String -> List String
Découpe une chaîne aux retours à la ligne. Un retour à la ligne final n'ajoute pas de ligne vide : lines "a\nb" = ["a", "b"], lines "a\n" = ["a"], lines "a\n\nb" = ["a", "", "b"].
splitCs : Char -> List Char -> List (List Char)
splitOnChar : Char -> String -> List String
Découpe une chaîne à chaque occurrence d'un caractère délimiteur, en gardant les morceaux vides : splitOnChar ',' "a,,b" = ["a", "", "b"], splitOnChar ',' "" = [""].
isJust : Maybe a -> Bool
Vrai pour un Just.
isNothing : Maybe a -> Bool
Vrai pour un Nothing.
listToMaybe : List a -> Maybe a
maybeToList : Maybe a -> List a
isLeft : Either a b -> Bool
Vrai pour un Left.
isRight : Either a b -> Bool
Vrai pour un Right.
fromLeft : a -> Either a b -> a
fromRight : b -> Either a b -> b
lefts : List (Either a b) -> List a
Ne conserve que les valeurs Left.
rights : List (Either a b) -> List b
Ne conserve que les valeurs Right.
partitionEithers : List (Either a b) -> (List a, List b)
Scinde une liste d'Either en (les Left, les Right), en préservant l'ordre.