let!, $ et #
Depuis le dernier billet, nous avons fait évoluer quelque peu la structure du code. D’abord, nous nous sommes débarassés de pa_monad pour le remplacer par notre propre préprocesseur. Première modification :
let! x,y = body in expr
Est transformé automatiquement en :
bind body (fun (x,y) -> expr)
C’est une amélioration par rapport à perform et <-- : la coloration syntactique et l’indentation marchent avec des options par défaut (pas besoin d’ajouter des règles spécifiques à perform), l’interaction avec des ; dans le code est correcte, et il n’y a pas de collision avec des bibliothèques qui définissent une fonction perform (par exemple, cURL).
Une deuxième règle de préprocesseur a fait son apparition : dans un contexte d’expression, #foo devient (fun x -> x # foo). Cela présente un intérêt évident dans la définition des templates HTML :
module Item = Loader.Html(struct
type t = < name : I18n.text ; email : string option > ;;
let source _ = "item"
let mapping _ = [
"name", Mk.trad (#name) ;
"email", Mk.esc (#email |- BatOption.default "")
]
end)
Enfin, bien que Batteries propose un opérateur **>, nous avons repris l’opérateur $ de Haskell pour alléger les parenthèses :
return $ Some value
Au lieu de :
return (Some value)


