Soy bastante nuevo para Haskell y lentamente me he estado dando cuenta de que algo anda mal con la falla de Monad. Real World Haskell warns against its use ("¡Una vez más, recomendamos que casi siempre evite usar el error!"). Me di cuenta hoy de que Ross Paterson lo llamó "una verruga, no un patrón de diseño" back in 2008 (y parecía llegar a un acuerdo en ese hilo).¿Debo evitar el uso de la mónada?
Mientras veía al Dr. Ralf Lämmel talk on the essence of functional programming, comencé a entender una posible tensión que pudo haber provocado que la Mónada fallara. En la conferencia, Ralf habla acerca de agregar varios efectos monádicos a un analizador monádico de base (registro, estado, etc.). Muchos de los efectos requerían cambios en el analizador básico y, en ocasiones, los tipos de datos utilizados. Pensé que la adición de 'fallar' a todas las mónadas podría haber sido un compromiso porque 'fallar' es tan común y quieres evitar los cambios en el analizador 'base' (o lo que sea) tanto como sea posible. Por supuesto, algún tipo de 'falla' tiene sentido para analizadores pero no siempre, por ejemplo, poner/obtener de Estado o preguntar/local de Reader.
Avíseme si podría ir por el camino equivocado.
¿Debo evitar el uso de Monad? ¿Cuáles son las alternativas a la falla de Monad? ¿Hay alguna biblioteca alternativa de mónadas que no incluya esta "verruga de diseño"? ¿Dónde puedo obtener más información sobre el historial de esta decisión de diseño?
[Mundo real Haskell dice] (http://book.realworldhaskell.org/read/monads.html#monads.monad.fail) "[en muchas mónadas]' fail' usa 'error'. Llamando' error' por lo general es altamente indeseable, ya que arroja una excepción que los llamadores no pueden captar o no esperan ". – Miikka
Respuesta corta: sí. –
Creo que se requiere "falla" para manejar fallas de coincidencia de patrones cuando cosas como: "Solo x <- algo que devuelve ImoMaybe". –