J'apprends toujours la programmation fonctionnelle (avec f #) et j'ai récemment commencé à lire sur les expressions de calcul. Je ne comprends toujours pas complètement le concept et une chose qui me rend incertain lors de la lecture de tous les articles concernant les monades (la plupart d'entre eux sont écrits sur la base de Haskell) est la relation entre les expressions de calcul et les monades.
Après avoir écrit tout cela, voici ma question (deux questions en fait):
Chaque expression de calcul F # est-elle une monade? Chaque monade peut-elle être exprimée avec une expression de calcul F #?
J'ai lu ce post de Tomas Petricek et si je le comprends bien, il déclare que les expressions de calcul sont plus que des monades, mais je ne suis pas sûr si j'interprète correctement.
la source
Réponses:
Tout d'abord, les expressions de calcul sont une caractéristique du langage, tandis que les monades sont des abstractions mathématiques, donc de ce point de vue, ce sont des choses complètement différentes .
Mais ce ne serait pas une réponse très utile :-). Les expressions de calcul sont une fonctionnalité de langage qui vous donne une syntaxe qui peut être utilisée pour la programmation avec des calculs (ou types de données) qui ont la structure monadique, mais ils peuvent également être utilisés avec d'autres structures. Vous pouvez lire mon article de zoo sur l'expression de calcul F # pour plus de détails, mais les expressions de calcul peuvent être utilisées avec:
MonadPlus
ouMonadOr
)Ainsi, les expressions de calcul sont certainement étroitement liées aux monades, mais elles ne leur sont pas si étroitement liées. Cela contraste, par exemple, avec la
do
notation de Haskell , qui est beaucoup plus étroitement liée aux monades (même si cela peut être utilisé avec des calculs qui ne sont pas strictement des monades mathématiques).la source
Vous pouvez utiliser des expressions de calcul pour exprimer des monades. Il y a un exemple ici . En outre, comme vous l'avez noté, vous pouvez utiliser des expressions de calcul pour bien plus que des monades. Il y a une explication détaillée sur la façon dont ils sont différents ici . Il n'y a pas d'espace ici pour expliquer la différence correctement, mais les expressions de calcul sont différentes des monades en ce qu'elles réutilisent la syntaxe F # normale et ont la possibilité d'ajouter des abstractions supplémentaires. Une limitation est qu'il est non idiomatique (et difficile) d'écrire une expression de calcul qui est polymorphe sur le type de calcul.
la source