Ich lerne über anwendungsbezogene Funktoren. Im source für eine applicative Maybe
, sieht die pure
Funktion wie folgt aus:Applikative Funktoren rein passender nicht verpackt
instance Applicative Maybe where
pure = Just
...etc
Mit den Argumenten erweitert, ich denke, es sieht aus wie:
pure x = Just x
Als ich pure (Just 5)
nennen, es gibt Just 5
.
Sollte es nicht Just (Just 5)
zurückgeben?
Auch für List:
instance Applicative [] where
pure x = [x]
Als ich pure [4,5,6]
nennen es gibt [4,5,6]
.
Aus der Signatur sieht es wie pure [4,5,6]
sollte [[4,5,6]]
zurückgeben.
Kann jemand in einfachen Worten erklären, was hier passiert?
Warten, ich glaube, ich habe es - da gibt es soweit keinen Zusammenhang pure [4,5,6]
nicht die Applicative
für List
verwendet, es ist nur den allgemeinen Fall verwenden und den gleichen Wert zurück. Ist das richtig?
Versuchen Sie 'pure 3' und' (rein :: Vielleicht Int -> Vielleicht (Vielleicht Int)) $ Nur 3'.Ich denke, dass es den allgemeinen Fall benutzt und wie [ghci versucht, auf IO zu setzen] (https://downloads.haskell.org/~ghc/7.10.2/docs/html/users_guide/interactive-evaluation.html), ' pure (Nur 5) wird als IO (Maybe Int) bewertet. – Yosh
Der Typ des reinen ist * nicht * 'ma -> m (ma)' - also gibt es nichts zu sagen, wenn der Wert 'x' in' reinem x' bereits innerhalb eines 'm' ist, das der' m' was rein schafft, wäre das gleiche 'm'. Wie @Yosh feststellte, wird die Eingabe von 'pure ..' in die GHCi-Eingabeaufforderung den Typ von pure auf" a -> IO a "setzen. Wenn dies nicht der Fall wäre, würde dies zu einem mehrdeutigen Typfehler führen (wie zB 'pure()' hat Typ 'Applicative f => f()') – user2407038