Sie erhalten das gleiche Verhalten, wenn Sie return
anstelle von pure
verwenden. Um herauszufinden, was zu tun ist, muss ghci einen Typ für den gegebenen Ausdruck auswählen. Die Standardregeln von ghci sind so, dass, wenn keine anderen Einschränkungen vorhanden sind, IO
für eine Applicative
oder Monad
Instanz ausgewählt wird. Daher interpretiert pure 1
als Ausdruck des Typs IO Integer
. Ausdrücke vom Typ IO a
, die an der Eingabeaufforderung eingegeben wurden, werden ausgeführt und ihre Ergebnisse werden gedruckt, wenn 1. a
eine Show
-Instanz und 2. a
nicht ()
hat. Die Eingabe von pure 1
an der Eingabeaufforderung führt zu
wird ausgeführt (und die magische Variable it
an die zurückgegebene v
gebunden). Für pure ()
gilt der Spezialfall, da ()
als uninteressant gilt, also nur return ()
ausgeführt wird und it
an ()
gebunden ist, für pure (+1)
wird eine Funktion zurückgegeben, es gibt keine Show
-Instanz Für Funktionen im Bereich, also wird nichts gedruckt. Jedoch,
mit einer Show
-Instanz für Funktionen im Bereich, wird gedruckt (nicht, dass es informativ ist), und die Funktion kann dann verwendet werden (letzteres ist unabhängig von einer Show
Instanz, die sich natürlich im Bereich befindet).
Tags und Links haskell applicative monads ghci