0
Prelude> :t (+2) <$> Just 2
(+2) <$> Just 2 :: Num b => Maybe b
Prelude> :t fmap (+2) Just 2
fmap (+2) Just 2 :: (Num (Maybe t), Num t) => Maybe t
Allerdings, wenn ich Klammern um das hinzufügen Vielleicht geben ich das erwartete gleiche Ergebnis:
Prelude> :t fmap (+2) (Just 2)
fmap (+2) (Just 2) :: Num b => Maybe b
Also meine Frage, warum - es ist Bedeutung des Vielleicht Daten Konstruktor oder etwas anderes?
Sie fehlen in Ihrem zweiten Beispiel Klammern. Versuchen Sie ': t fmap (+2) (Nur 2)' – pdexter
Klammern sind erforderlich, weil haskell so analysiert wird. Es hat nichts mit dem vielleicht Typ zu tun. – pdexter
Beachten Sie, dass '(+2)' und 'Just' Funktionen mit den Typen 'Num a => a -> a 'und' b -> Maybe b' sind, die 'fmap' die [' Functor 'instance von' -> '] (http://stackoverflow.com/questions/10294272/confused-about-function-as-instance-of-functor-in-haskell), jetzt von der Funktorinstanz haben wir' fmap fg = \ y -> f (gy) 'in unserem Fall' f = (+2) 'und' g = Gerade ', also' fmap (+2) Gerade = \ y -> (+2) (Gerade y) 'Jetzt wendet du das auf' 2' an und du erhältst '(+2) (nur 2)'. Das erklärt die 'Num (Maybe t) 'Einschränkung. – Bakuriu