2016-12-28 6 views
2

Die Wikipedia article on monads sagt:Monad vs sequenziellen Funktionsaufrufe

Rein funktionale Programme Monaden können Verfahren strukturieren, die sequenziert Operationen wie in strukturierte Programmierung gefunden schließen diejenigen ein.

Nicht auf der Suche nach einem (anderen) Monad Tutorial hier. Bitte geben Sie ein Beispiel für Monade, die sequenzielle Operationen ermöglicht, wenn nur eine Funktion ausgeführt wird und dann eine andere nicht ausreicht. Ist es irgendwie mit diesen Funktionsaufrufen verbunden, die gemäß den funktionalen Sprachspezifikationen faul sind? Warum benötigt die sequentielle Ausführung nicht ausgetauschter Funktionen einen "Wrapper"?

+0

Ihre Fragen sind nicht sehr klar formuliert. Können Sie Ihren Beitrag revidieren und Ihre Fragen leichter verständlich machen? –

+0

Nah-Duplikat: [* Monaden, Komposition und die Reihenfolge der Berechnung *] (http://Stackoverflow.com/q/41310361/2751851) – duplode

+0

Auch relevant: [die zweite Antwort auf * Warum brauchen wir Monaden? *] (http://stackoverflow.com/a/28141248/2751851) – duplode

Antwort

4

Die Haskell Monad Tutorial deutlich zeigt ein Beispiel für die Sequenzierung Funktionsaufrufe in einer monadischen Mode:

type Sheep = ... 

father :: Sheep -> Maybe Sheep 
father = ... 

mother :: Sheep -> Maybe Sheep 
mother = ... 

-- comb is a combinator for sequencing operations that return Maybe 
comb :: Maybe a -> (a -> Maybe b) -> Maybe b 
comb Nothing _ = Nothing 
comb (Just x) f = f x 

-- now we can use `comb` to build complicated sequences 
mothersPaternalGrandfather :: Sheep -> Maybe Sheep 
mothersPaternalGrandfather s = (Just s) `comb` mother `comb` father `comb` father