• [^] # Re: ouai

    Posté par (site web personnel) . En réponse au journal Données vs Code. Évalué à 4.

    Hum... Il me semble que c'est équivalent au Option/Optional que l'on trouve un peu partout.

    Oui exactement, la monade ajoute des traitements et des opérateurs pour travailler facilement avec.

    Je suis loin de comprendre, mais c'est une représentation de l'état courant en suivant tout le chemin de la donnée ça me semble un peu violent.

    Voici un petit exemple en OCaml

    type validation_pending
    type validation_done
    type 'a password = string
    val password_input : unit -> validation_pending password
    (** Lit un mot de passe sur stdin. *)
    val password_validate : 'a password -> validation_done password
    (** Valide un mot de passe. Lève l'exception [Failure] si le mot de passe est rejeté. *)
    val password_store : validation_done password -> unit
    (** Sauvegarde le (hash du) mot de passe. *)
    

    Avec cette API, le mot de passe est une simple chaîne de caractères mais les types fantômes (qui n'ont pas de définition) validation_pending et validation_done permettent à la fonction password_validate de marquer sa sortie et à la fonction password_store de n'accepter que les valeurs passées par l'étape de validation.

    C'est différent d'un bit d'attribut car le type est un attribut du programme connu du compilateur, qui garantit que si un programme compile, alors la fonction password_store ne peut être appelée que sur un valeur de sortie de password_validate.

    Ça me semble représenter au mieux ce que je pense. En quoi est-ce que c'est un type abstrait ?

    Le type password est un type abstrait si on ne montre pas la définition du type password dans l'API. Cela permet de garantir que seules les fonctions de l'API permettent de manipuler la valeur. Ainsi, on peut s'assurer que le programme ne va jamais afficher de password en n'offrant aucune fonction qui permet de transformer le password en string ou un autre type affichable.