2015-03-27 11 views
5

Podobno nazwa zwykła dla operatora ((.).(.)) to (.:). Gdzie zdefiniowano (.:)? Czy muszę sam to zdefiniować?Gdzie jest zdefiniowany operator Haskell (. :)?

+6

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

+0

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

Odpowiedz

8

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 (.).

+0

Oh. Niesamowita biblioteka. Dzięki. – Ana

+0

Przyjemne podejście do '.:'. Wygląda na bardziej użyteczną dla innych funktorów niż dla funkcji. –

Powiązane problemy