Attualmente sto scrivendo un progetto in cui faccio un uso massiccio del trasformatore monad ListT
. Quando si usano liste semplici, implementare il nondeterminismo è molto semplice. Tuttavia, una volta che ho dovuto convertire il mio codice in ListT
, è diventato molto più complicato .Come convertire in modo pulito tra liste e trasformatori monad ListT?
Come semplice esempio: la conversione [a]
-ListT a
in realtà richiede la composizione di due funzioni:
conv :: (Monad m) => [a] -> ListT m a
conv = ListT . return
Anche se è semplice, sono sorpreso che non è già lì.
Domande:
- C'è qualche modo migliore per gestire nondeterminismo in cui è necessario un trasformatore monade?
- Esistono tecniche/librerie per convertire in modo pulito avanti e indietro tra gli elenchi e
ListT
?
I motivi esatti sono piuttosto complicato, quindi non ho davvero voglio dilungarmi troppo su questo.
Sì, sono d'accordo che 'conv' è una funzione semplice. Sono solo sorpreso che non sia già lì. Ci sono pochissime utilità nel modulo 'ListT' che mi fa sentire come se reinventassi la ruota. È tutto. – julkiewicz