• [^] # Re: Méconnaissance

    Posté par (site web personnel) . En réponse au journal Compilateur et Monad Reader. Évalué à 3.

    En effet, c'est assez joli, mais quand tu fais bind tu dois préciser depuis quel module visiblement (j'ai parcouru très rapidement la doc) ? Si on utilise une unique monade (comme dans mon cas) un open ou un renommage peut faire l'affaire, mais sinon, ne trouves-tu pas ça un peu lourd ?

    C'est exact. En pratique j'utilise un renommage pour les monades sans paramètre (module Maybe = Lemonade_Maybe) ou un nom assez court pour les applications de foncteur (module Success = Lemonade_Success.Make(struct type t = string end)). Ensuite j'emploie toujours le nom qualifié – l'autocomplétion fournie par merlin marche à merveille – et j'ouvre le sous-module Infix qui définit les opérateurs infixes. En général j'utilise let open Maybe.Infix in dans mes fonctions par exemple, ou bien utilise la syntaxe Maybe.Infix.(m >>= f >>= g).

    Limiter le nombre de modules ouverts dans un projet augmente la lisibilité du code, même si on peut facilement utiliser merlin pour lever l'ambiguïté sur un type.

    Il y a un projet de recherche – malheureusement j'ai perdu les références – qui implémente des modules disons semi-ouverts pour OCaml, qui permettrait au compilateur de choisir un module en fonction du type des arguments d'une fonction pour résoudre la fonction, ce qui serait très intéressant pour le code monadique ainsi que les fonctions de persistance notamment. J'ai cru comprendre que ce travail devrait être intégré au code officiel. Est-ce que quelqu'un a plus de précisions?