Nach pointfree
:Was ist die Ableitung, die Haskell's x -> (x, x) Äquivalent zu Join (,) zeigt?
\x -> (x, x)
entspricht:
join (,)
Was die Ableitung ist, dass dies zeigt?
Nach pointfree
:Was ist die Ableitung, die Haskell's x -> (x, x) Äquivalent zu Join (,) zeigt?
\x -> (x, x)
entspricht:
join (,)
Was die Ableitung ist, dass dies zeigt?
Blick auf die Art Signaturen:
\x -> (x, x) :: a -> (a, a)
(,) :: a -> b -> (a, b)
join :: Monad m => m (m a) -> m a
Es sollte beachtet werden, dass ((->) r)
eine Instanz des Monad
typeclass ist. Daher auf Spezialisierung:
join :: (r -> r -> a) -> (r -> a)
Was join
für Funktionen tut, ist die gegebene Funktion zweimal auf das gleiche Argument gilt:
join f x = f x x
-- or
join f = \x -> f x x
Von diesem können wir trivialer sehen:
join (,) = \x -> (,) x x
-- or
join (,) = \x -> (x, x)
Qed.
Ich mag Aadits intuitive Antwort. Hier ist, wie ich es herausfinden würde, indem ich den Quellcode lese.
join
join
join
join x = x >>= id
join (,) = (,) >>= id
>>=
on Hoogle and click the link(,)
zu tun habe, die eine Funktion ist, so dass ich click "source" on the Monad ((->) r)
instancef >>= k = \r -> k (f r) r
f = (,)
und k = id
haben wir \r -> id ((,) r) r
bekommenid
! Ich suche für das An- Hoogle und click through to its source codeid x = x
join (,)
wir jetzt \r -> ((,) r) r
\r -> (,) r r
\r -> (r,r)
istVergessen Sie nie, dass sich die Haddocks mit dem Quellcode der Bibliothek verbinden. Das ist immens nützlich, wenn Sie herausfinden wollen, wie die Dinge zusammen funktionieren.
Das ist schön für Anfänger.Diese Art von Antworten zu schreiben ist immens nützlich für Neuankömmlinge. –