EN
PréludeChargé par défaut — aucun import nécessaire.

IsList — littéraux de liste surchargés ([..])

Synopsis
interface IsList f where
fromListLit : List a -> f a

L'adaptateur derrière un littéral [1, 2, 3] dont le type attendu est un conteneur SANS les constructeurs ::/Nil. Un littéral [e1, …, en] EST la colonne e1 :: … :: en :: Nil, résolue par le type attendu, List par défaut ; à List ou LazyList, qui possèdent ces constructeurs, cette colonne est la valeur elle-même (un littéral LazyList garde ses queues en attente, comme a :: e :: Nil). À tout autre conteneur — Vector, Array, le vôtre — le typeur construit la colonne en List et la donne à fromListLit, qui la réalise dans la représentation propre de ce conteneur (Vector : un tampon dense en O(n), jamais le O(n²) d'un cons dense répété). C'est la moitié « construction » de l'IsList de Haskell ; oppi garde les MOTIFS [..] structurels sur List (la seule instance à cons), la classe n'a donc pas besoin de méthodes nil/cons.

La méthode s'appelle fromListLit, PAS fromList : le nom nu fromList est déjà le constructeur qualifié par module dans toute la bibliothèque (Vector.fromList, String.fromList, Map.fromList, …) et s'emploie sans argument dans le Prélude ; une méthode de classe nue du même nom le masquerait. On écrit la surface [..] ; fromListLit est la cible de l'élaboration, donnée ici pour qu'un conteneur sur mesure puisse accueillir son propre littéral [..].

Instances : LazyList, List, Vector