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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
scroll top