Haskell LanguageLentille


Introduction

Lens est une bibliothèque pour Haskell qui fournit des objectifs, des isomorphismes, des plis, des traversées, des getters et des setters, exposant une interface uniforme pour interroger et manipuler des structures arbitraires, contrairement aux concepts d’accesseur et de mutateur de Java.

Remarques

Qu'est-ce qu'un objectif?

Les objectifs (et autres optiques) nous permettent de séparer la description de la manière dont nous voulons accéder à certaines données de ce que nous voulons en faire. Il est important de faire la distinction entre la notion abstraite d’une lentille et la mise en œuvre concrète. Comprendre de manière abstraite facilite beaucoup la programmation avec des lens à long terme. Il existe de nombreuses représentations isomorphes des lentilles. Par conséquent, pour cette discussion, nous éviterons toute discussion concrète sur la mise en œuvre et donnerons une vue d'ensemble de haut niveau des concepts.

Mise au point

Un concept important dans la compréhension abstraite est la notion de focalisation . Les optiques importantes se concentrent sur une partie spécifique d'une structure de données plus grande sans oublier le contexte plus large. Par exemple, l'objectif _1 se concentre sur le premier élément d'un tuple mais n'oublie pas ce qui se trouvait dans le second champ.

Une fois que nous avons le focus, nous pouvons alors parler des opérations que nous sommes autorisés à effectuer avec un objectif. Étant donné un Lens sa qui , lorsqu'il est donné un type de données de type s se concentre sur un particulier a , nous pouvons soit

  1. Extraire le a en oubliant le contexte supplémentaire ou
  2. Remplace le a en fournissant une nouvelle valeur

Celles-ci correspondent aux opérations get et set bien connues qui sont généralement utilisées pour caractériser une lentille.

Autres optiques

Nous pouvons parler d'autres optiques d'une manière similaire.

Optique Met l'accent sur...
Lentille Une partie d'un produit
Prisme Une partie d'une somme
Traversal Zéro ou plusieurs parties d'une structure de données
Isomorphisme ...

Chaque optique se concentre différemment, en tant que tel, selon le type d’optique, nous pouvons effectuer différentes opérations.

Composition

De plus, nous pouvons composer n'importe laquelle des deux optiques que nous avons déjà discutées afin de spécifier des accès de données complexes. Les quatre types d'optiques dont nous avons discuté forment un réseau, le résultat de la composition de deux optiques ensemble est leur limite supérieure.

entrer la description de l'image ici

Par exemple, si nous composons ensemble une lentille et un prisme, nous obtenons une traversée. La raison en est que, par leur composition (verticale), nous nous concentrons d'abord sur une partie d'un produit, puis sur une partie d'une somme. Le résultat étant une optique qui se concentre précisément sur zéro ou une partie de nos données, ce qui est un cas particulier d'une traversée. (Ceci est aussi parfois appelé une traversée affine).

À Haskell

La popularité de Haskell s'explique par la représentation très succincte de l'optique. Toutes les optiques ne sont que des fonctions d'une certaine forme qui peuvent être composées ensemble en utilisant la composition de fonctions. Cela conduit à une intégration très légère, ce qui facilite l'intégration de l'optique dans vos programmes. De plus, en raison des particularités de l'encodage, la composition de la fonction calcule automatiquement la limite supérieure de deux optiques que nous composons. Cela signifie que nous pouvons réutiliser les mêmes combinateurs pour différentes optiques sans coulée explicite.

Lentille Exemples Liés