Todavía estoy aprendiendo programación funcional (con f #) y recientemente comencé a leer sobre expresiones de cálculo. Todavía no entiendo completamente el concepto y una cosa que me mantiene inseguro al leer todos los artículos sobre mónadas (la mayoría de ellas están escritas en base a Haskell) es la relación entre las expresiones de cálculo y las mónadas.
Habiendo escrito todo eso, aquí está mi pregunta (dos preguntas en realidad):
¿Cada expresión de cálculo de F # es una mónada? ¿Se puede expresar cada mónada con la expresión de cálculo F #?
He leído esta publicación de Tomas Petricek y, si la entiendo bien, dice que las expresiones de cálculo son más que mónadas, pero no estoy seguro de interpretar esto correctamente.
functional-programming
Grzegorz Sławecki
fuente
fuente
Respuestas:
En primer lugar, las expresiones de cálculo son una característica del lenguaje, mientras que las mónadas son abstracciones matemáticas, por lo que desde este punto de vista, son cosas completamente diferentes .
Pero esa no sería una respuesta muy útil :-). Las expresiones de computación son una característica del lenguaje que le brinda una sintaxis que se puede usar para programar con cálculos (o tipos de datos) que tienen la estructura monádica, pero también se pueden usar con otras estructuras. Puede leer mi documento de zoológico de expresión de cálculo F # para obtener más detalles, pero las expresiones de cálculo se pueden usar con:
MonadPlus
oMonadOr
)Por lo tanto, las expresiones de cálculo están ciertamente estrechamente vinculadas a las mónadas, pero no están estrechamente vinculadas a ellas. Esto está en contraste, por ejemplo, con la
do
notación de Haskell , que está mucho más vinculada a las mónadas (aunque incluso eso puede usarse con cálculos que no son estrictamente matemáticamente mónadas).fuente
Puede usar expresiones de cálculo para expresar mónadas. Hay un ejemplo aquí . Además, como notó, puede usar expresiones de cálculo para mucho más que solo mónadas. Hay una explicación extendida sobre cómo son diferentes aquí . Aquí no hay espacio para explicar la diferencia correctamente, pero las expresiones de cálculo son diferentes de las mónadas en que reutilizan la sintaxis normal de F # y tienen la capacidad de agregar abstracciones adicionales. Una limitación es que no es idiomático (y difícil) escribir una expresión de cálculo que sea polimórfica sobre el tipo de cálculo.
fuente