2014-05-06 13 views
9

In APL und Haskell, bedeutet der Begriff Monad zwei völlig verschiedene Dinge, oder das gleiche aus zwei verschiedenen Perspektiven betrachtet.Haskell's Monad vs APL's Monad

Ich bin ziemlich neu in beiden Sprachen und versuche, die übergeordneten Konzepte sinnvoll zu machen.

Antwort

12

Ganz anders, in Haskell eine Monade ist alles ausgestattet mit zwei Funktionen

bind :: m a -> (a -> m b) -> m b 
return :: a -> m a 

Und ein paar Regeln, wie sie zusammen spielen. Es ist eigentlich eine Konstruktion aus der Kategorientheorie.

In APL ist eine Monade nur ein Begriff für die Beschreibung wie viele Argumente eine Funktion (Verb) dauert. Es scheint, dass in "Monade" als ein Synonym für "unäre Funktion" verwendet werden kann und ist ein Begriff, der häufig in der Logik und Linguistik gefunden wird.

3

Von dem, was ich sagen kann, sind sie verschiedene Dinge. Wenn APLs Monade nur ein Verb mit einem einzigen Argument ist (wie this page würde mich glauben lassen; ich kenne APL nicht), ist es sehr verschieden von Haskells Monade, die aus der Kategorientheorie stammt und nichts mit der Artigkeit von Funktionen.

6

Zwei völlig verschiedene Dinge! Monad geht oft in Serie mit "Dyad" und "Triad", was einfach "eins", "zwei", "drei" bedeutet. Im Falle von APL gibt es "von einem Argument" an.

Monaden in Haskell sind völlig anders. Wahrscheinlich nehmen sie ihre Etymologie von "monoid" und "operad", die beide auch völlig verschieden sind.

+3

etymologie von monad: http://english.stackexchange.com/questions/30654/where-does-the-term-monad-come-from – luqui

0

APL-Programmierer und APL-Dokumentation verwenden selten den Begriff "Monade". Stattdessen beziehen sie sich auf eine "monadische Funktion" (eine Funktion, die nur ein einzelnes Argument akzeptiert) oder "eine Funktion namens monadisch" (eine, die ein optionales Argument weglässt). Beides ist dem Haskell-Gebrauch des Begriffs "Monad" überhaupt nicht ähnlich.