Haskell
Transformateurs: composition de monades
· ☕ 13 min de lecture

Dès lors qu’on découvre les monades et leur utilité, on ne peut faire autrement que de les étudier davantage et trouver les occasions pour les utiliser. Après tout, ils sont des concepts clefs dans l’utilisation sérieuse d’un langage fonctionnel comme Haskell. Par exemple, on ne peut pas faire d’opérations d’entrée/sortie si on ne fonctionne pas dans la monade IO.

Une limitation importante prend forme très rapidement sous nos yeux: il devient difficile d’utiliser plusieurs monades ensembles car on doit forcément les développer pour passer d’une monade à l’autre. Ce faisant, on doit choisir entre les propriétés d’une monade ou l’autre et on ne peut donc pas bénéficier des différents monades en même temps. Les transformateurs de monades visent justement à régler ce problème de manière à fournir une écriture finale satisfaisante autant au niveau sémantique que pour l’organisation logique du code.


La monade Maybe
· ☕ 12 min de lecture

Dans cet article, je souhaite introduire le programmeur à la monade Maybe. Je compte le faire en utilisant le langage Haskell puisqu’il s’agit du langage fonctionnel que je maîtrise le mieux et que je le considère très expressif et accessible. Afin de démontrer les bénéfices de la monade et des concepts d’Haskell, je vais comparer ceux-ci aux méthodes usuelles du langage C++.

En une phrase, la monade Maybe peut être vue comme un design pattern de gestion des cas d’erreur ou d’exception. Je vais donc utiliser un exemple fictif et peu réaliste, mais simple, qui permet de capturer l’idée générale. Disons qu’on a une liste de contacts pour lesquels on souhaite exécuter un traitement. Cependant, on décide que, dans la région du programme où on implémente le code associé à cette liste de contact, une opération qui échoue sur un contact devrait arrêter le fil d’exécution du programme.


Haskell: programmation dynamique
· ☕ 11 min de lecture

L’approche de programmation dynamique est souvent associée au remplissage d’un tableau à deux dimensions et à l’écriture explicite de ce procédé sous forme itérative. Dans un langage fonctionnel comme Haskell, on bénéficie de quelques avantages d’expressivité de haut niveau et de lisibilité qu’on ne retrouve pas autrement.

Dans cet article, je commence par explorer deux exemples triviaux de programmation dynamique. Ensuite, je passe sur un problème tout aussi accessible, mais dont l’achèvement optimal demandera l’utilisation d’une structure Data.Array plutôt que la liste conventionnelle.