In che modo Kleisli è un trasformatore monade?
Qualche definizione di Monad Transformers nei gatti.
EitherT [F [_], A, B] è un involucro leggero per F [O [A, B]] che rende facile comporre Eithers e Fs insieme. Per utilizzare EitherT, i valori di Either, F, A e B vengono prima convertiti in EitherT e i valori EitherT risultanti vengono quindi composti utilizzando i combinatori.
Opzione T [F [_], A] è un involucro leggero su una F [Opzione [A]]. Tecnicamente parlando, è un trasformatore monade per Option, ma non è necessario sapere cosa significa perché sia utile. Può essere più comodo lavorare con OptionT che usare direttamente F [Opzione [A]].
Capisco il concetto, ne ho viste anche di interessanti discorsi: Monad transformers down to earth di Gabriele Petronella
Capisco la Reader Monad e come Kleisli sia solo una generalizzazione.
Quello che non capisco è l'affermazione qui sotto, che dice che si tratta di un trasformatore monade. Cosa stiamo impilando esattamente? Non vedo 2 monade impilate qui ....
Kleisli può essere visto come il trasformatore monade per le funzioni. Ricorda che nella sua essenza, Kleisli [F, A, B] è solo una funzione A => F [B], con sottigliezze per rendere facile lavorare con il valore che ci interessa veramente, la B. Kleisli ci permette di prendere gli effetti delle funzioni e di farli funzionare bene con gli effetti di qualsiasi altro F [_].
Qualche idea ?
Risposte
Il trasformatore di monade EitherT[F[_], A, B](un involucro per F[Either[A, B]]) appare quando consideriamo la composizione di due monadi: F(monade esterna) e Either[A, ?](monade interna).
Il trasformatore di monade OptionT[F[_], A](un involucro per F[Option[A]]) appare quando consideriamo la composizione di due monadi: F(monade esterna) e Option(monade interna).
Il trasformatore di monade Kleisli[F, A, B](un involucro per A => F[B]) appare quando consideriamo la composizione di due monadi: A => ?(monade esterna) e F(monade interna).