Viele Haskell-Anwendungen verwenden Monade Transformatoren, die Instanzen der Typklasse sind
class MonadTrans t where
lift :: Monad m => m a -> t m a
Was das bedeutet ist, können Sie die Umgebung durch mehrere Monaden vorgesehen kombinieren, indem sie zusammen wickeln. Zum Beispiel gibt Ihnen die State s
Monade die Möglichkeit, im Zustand s
zu arbeiten, der automatisch durch Ihre Berechnung gefädelt wird, während die Maybe
Monade einen Kurzschlussfehler verursacht. Aber wenn Sie beide dieser Effekte wollen, dann können Sie sie kombinieren, indem eine Monade Transformator Version von einem der beiden mit, wie zum Beispiel:
something :: StateT s Maybe a
Hier wird StateT
im mtl
Paket definiert und ist ähnlich wie State
, bis auf einen Platz für eine andere Monade, die darin sitzt. Durch die Verwendung von Monad-Transformatoren können Sie die Effekte von mehreren Monaden stückweise zusammenstellen. In diesem Fall ist Maybe
die innere Monade und StateT s Maybe
die äußere Monade. Sie können von der inneren Monade zur äußeren Monade gelangen, indem Sie lift
aus der MonadTrans
Klasse verwenden.
Bitte verlinken Sie zu diesen Artikeln. Ansonsten ist Ihre Frage zu niedrig angegeben. – misterbee