to możliwe, że mogliśmy korzystać złożenie funkcji dla foo (bar x) (bar y)
@ilyavf dał odpowiedź, dla definicji funkcji takiej, że (foo $.$ bar) x y
będzie działał jak foo (bar x) (bar y)
. I @jamshidh oferuje, że istnieje jako on
w Data.Function.
jednak zauważyć podpis typu o to rodzaj specyficznego kształtu:
(b -> b -> c) -> (a -> b) -> (a -> a -> c)
Jako funkcja, choć to „kształt zabawny” ze względu na założeniu, że ma do wykonania. To założenie jest takie, że oba argumenty foo
są tego samego typu. (inaczej, jak może być poprawne użycie wyniku dla obu?)
"Bardziej przyjemny kształt", do którego grawituje Haskell, nie przywołuje szczególnego przypadku pracy z funkcjami, które mają dwa argumenty tego samego typu. Bo co jest takiego specjalnego w 2? O wiele bardziej interesujące jest "N", a jeśli twoja funkcja przyjmuje N argumentów tego samego typu, to lista jest ładniejsza ... i może komponować, jak chcesz, z operacją mapy, która może działać z dowolną liczbą argumentów:
foo [bar x, bar y]
=>(foo . map bar) [x, y]
zauważyć, że w przyszłości, można spróbować użyć [Hoogle] (https://www.haskell.org/hoogle/?hoogle= (b% 20-% 3E% 20b% 20 -% 3E% 20c)% 20-% 3E% 20 (a% 20-% 3E% 20b)% 20-% 3E% 20a% 20-% 3E% 20a% 20-% 3E% 20c) w celu wyszukania funkcji chcesz, co w rzeczywistości daje użyteczną odpowiedź tutaj. :) –