Études-Mathématique/Modification d'une partie d'un conteneur

From Lazi wiki
Jump to: navigation, search

Question

Si une instance fait partie d'une plus grande instance et que le type de la grande instance délègue la modification au type de l'instance composante, il faut alors construire l'instance globale modifiée. Comment faire ?

Par exemple le type formulaT a des instances pouvant être composées du type applyT. formulaT délègue le remplacement de mots à applyT, mais comment alors construire l'instance globale après modification ?

Étude

Cas des conteneurs où les instances contenues sont de type unique

On peut alors utiliser une fonction "map" du conteneur.

Cas pour unionT

À la haskell

L'idée est de ne pas définir la fonction de modification dans les types contenus. Ce qui peut éviter une lourdeur. Mais si le type évolue alors la fonction n'est plus valable car on n'a pas une définition de fonction générique.

Fonction de modification dans le type

Dans ce cas chaque type composant contient une fonction qui peut:

  • ne rien faire (s'il n'y a pas de modification à effectuer)
  • retourner une instance, à priori différente, et de même type que celle de départ,
  • retourner une valeur quelconque.

Cas spécial du remplacement de mots dans formulaT

Dans ce cas le problème est que la fonction de modification ne retourne pas le même type si on délègue au type "mot". Solution: dans le type formulaT on définit la fonction de remplacement qui traite le cas spécial pour les mots et sous-traite aux types composants pour les autres cas. Dans les types composants la fonction retourne une instance du type composant.

Réponse

Pour le cas général: la fonction du type général convertit les types des instances rendus par les fonctions particulières qui retourne le même type que celui de leurs instances.

Pour le cas spécial de formulaT, voir l'étude.