Podobno nazwa zwykła dla operatora ((.).(.))
to (.:)
. Gdzie zdefiniowano (.:)
? Czy muszę sam to zdefiniować?Gdzie jest zdefiniowany operator Haskell (. :)?
Odpowiedz
Można go znaleźć w bibliotece composition wraz z innymi kompozycjami funkcji wyższego rzędu. Ten operator nie jest zdefiniowany w base
. Jeśli nie chcemy dodać (bardzo mały) pakiet jako zależność potem po prostu zdefiniować siebie, chociaż chciałbym użyć wersji bardziej uogólnić, który używa fmap
:
(.:) :: (Functor f, Functor g) => (a -> b) -> f (g a) -> f (g b)
(.:) = fmap fmap fmap
który właśnie fmap
funkcja sa przez dwie warstwy funktorów. W przypadku funkcji wszystkie trzy z tych fmap
s specjalizują się w (.)
.
Oh. Niesamowita biblioteka. Dzięki. – Ana
Przyjemne podejście do '.:'. Wygląda na bardziej użyteczną dla innych funktorów niż dla funkcji. –
Należy pamiętać, że [Ho Complete firmy Hoogle] (https://www.fpcomplete.com/hoogle?q=.%3A&env=ghc-7.8-stable-14.09) jest niezwykle pomocne w tych scenariuszach. – Sibi
Jeśli masz kod, który używa pewnej nazwy i ładuje się do 'ghci' lub' cabal repl', możesz na przykład wpisać ': i.:', Aby uzyskać trochę informacji na ten temat. – Heimdell