Ich bin neu zu Monad Transformatoren, so tut mir leid, einfache Frage. Ich habe Wert val :: MaybeT IO String
und Funktion fn :: String -> IO [String]
. Also nach dem Binden habe ich val >>= liftM fn :: MaybeT IO (IO [String])
. Wie kann ich doppelte IO-Monade entfernen und das Ergebnis vom Typ MaybeT IO [String]
erhalten?Monad Transformatoren Monad Duplizierung
10
A
Antwort
13
Verwenden Sie lift
(oder liftIO
) anstelle von liftM
.
> :t val >>= lift . fn
val >>= lift . fn :: MaybeT IO [String]
liftM
ist in einer monadisch reine Funktionen anwenden. lift
und liftIO
sind zum Heben von Aktionen in einen Transformator.
liftM :: Monad m => (a -> b) -> m a -> m b
lift :: (Monad m, MonadTrans t) => m a -> t m a
liftIO :: MonadIO m => IO a -> m a
Verwandte Themen
- 1. Monad Transformatoren und Hubfunktion
- 2. Monad-Transformatoren mit Scalaz-Streams
- 3. "Monad Transformatoren leistungsfähiger als Effekte" - Beispiele?
- 4. Warum unterscheiden sich Monad-Transformatoren von Monaden?
- 5. Haskell's Monad vs APL's Monad
- 6. Monad Stack Penetration Klassen mit Free/Operational Monad Transformers?
- 7. Kann ich Monad-Transformatoren verwenden, um diese Zusammensetzung zu vereinfachen?
- 8. Beispiel für einen großen Monad-Stack
- 9. Unterschied zwischen Par Monad und Eval Monad mit deepseq
- 10. Haskell Quine: "ap" Monad
- 11. Besondere Monad. Haskell
- 12. Prompt Monad in Purescript
- 13. Ableitung von Free Monad
- 14. JsResult - Monad oder Applicative?
- 15. Monad Transformator für NonEmptyList?
- 16. Datensatzaktualisierungsfehler in IO Monad?
- 17. Bind und Monad Stack
- 18. STM Monad Problem
- 19. Befehlszeilenargumente lesen Monad-Bibliothek
- 20. JS Monad Unit-Funktion
- 21. Monad-Eigenschaft in Scala
- 22. Instanz Monoid Monad
- 23. faltlWithKey in monad
- 24. Reader Transformator Monad
- 25. Die Pause monad
- 26. Reader Monad mit Scalaz
- 27. State Monad Bind
- 28. Turtle Graphics als Haskell Monad
- 29. Übersetzen von Monad zu Applicative
- 30. Warum ist Identity Monad nützlich?