• [^] # Re: Le cercle vicieux de la popularité

    Posté par . En réponse au lien Why I love OCaml. Évalué à 3.

    Par contre sa syntaxe est un peu hermétique de prime abord

    En toute curiosité, que trouves-tu d'hermétique dans sa syntaxe ? Personnellement, je la trouve claire dans l'ensemble.

    Le premier point qui m'interpelle est la syntaxe sur les types paramétriques où l'argument est placé devant la fonction, tout cela à cause d'une mauvaise influence de la grammaire anglaise : en anglais on écrira l is an int list, ce qui donne l : int list en OCaml (le : d'un jugement de typage étant le verbe être d'un jugement prédicatif, comme dans Socrate est mortel), là où je préférerais l : list int, le type paramétrique list étant une fonction des types dans les types que l'on applique ici à l'argument int. Cette syntaxe étant celle de tous les autres langages basés sur Curry-Howard, et qui est celle de l'application de fonction quand elle concerne les valeurs et non les types en OCaml.

    Le second est la syntaxe des modules de première classe qui permettent de considérer les types classes de Haskell ou les traits de Rust comme des valeurs de première classe (ce qu'ils ne sont pas dans ces langages, étant gérés uniquement par le compilateur). Si j'ai un trait Showable (un type que l'on peut convertir en chaînes de caractères), on se retrouve avec des interfaces ayant cette signature

    val foo : (module M : Showable with type t = 'a) -> 'a -> foo

    ce qui est un peu lourd. Là où je préférerais une syntaxe plus légère de la forme

    val foo : (module M : Showable) -> M.t -> foo

    Le premier point risque de rester pour toujours pour des raisons historiques, le second est un PR en attente de validation qui, en plus de simplifier la syntaxe, enrichit grandement les possibilités d'usage des modules de première classe.

    Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.