Modi diversi per vedere una monade
https://softwareengineering.stackexchange.com/questions/161443
-
04-11-2019 - |
Domanda
Mentre imparando Haskell ho affrontato molti tutorial che cercano di spiegare quali sono le monadi e perché le monadi sono importanti in Haskell. Ognuno di essi ha usato analogie, quindi sarebbe più facile catturare il significato. Alla fine della giornata, ho finito con 3 diversi visione di ciò che è una monade:
Visualizza 1: Monade come etichetta
A volte penso che una monade come etichetta per un tipo specifico. Ad esempio, una funzione di tipo:
myfunction :: IO Int
MyFunction è una funzione che ogni volta che viene eseguito produrrà un valore int. Il tipo di risultato non è int ma io int. Quindi, IO è un'etichetta del valore INT che avverte l'utente di sapere che il valore INT è il risultato di un processo in cui è stata effettuata un'azione IO.
Di conseguenza, questo valore INT è stato contrassegnato come valore proveniente da un processo con IO, quindi questo valore è "sporco". Il tuo processo non è più puro.
Visualizza 2: Monade come spazio privato in cui possono accadere cose cattive.
In un sistema in cui tutto il processo è puro e rigoroso a volte è necessario avere effetti collaterali. Quindi, una monade è solo un piccolo spazio che ti consente di fare brutti effetti collaterali. In questo spazio è permesso di sfuggire al mondo puro, andare in impuro, fare il tuo processo e poi tornare con un valore.
Visualizza 3: Monade come nella teoria della categoria
Questa è l'opinione che non capisco completamente. Una monade è solo un funtore della stessa categoria o una sottocategoria. Ad esempio, hai i valori INT e come sottocategoria IO int, che sono i valori INT generati dopo un processo IO.
Queste viste sono corrette? Qual è più accurato?
Nessuna soluzione corretta