Właśnie napisał funkcje takie jak to do map4
tylko dlatego, że wydają się przydatne:Czy jest coś takiego jak `map2 :: (i -> a) -> (i -> b) -> [i] -> [(a, b)]`?
map2 :: Functor f => (i -> a) -> (i -> b) -> f i -> f (a,b)
map2 f1 f2 = fmap $ \i -> (f1 i, f2 i)
Przed I nadal map8
pomyślałem, że zapytać, czy istnieje coś podobnego w jakimś standardowym module. Hayoo nie zna żadnej funkcji, która ma podpis powyżej.
Uwaga: Znalazłem już Control.Arrow.&&&
co zmniejsza powyższe do:
map2 f1 f2 = fmap (f1 &&& f2)
Ale nie wydaje się być podobna funkcja dla fanout więcej niż dwa.
Możesz również użyć 'liftA3 (,,)' –
Och, miło! To zdecydowanie lepsze (w sensie mniejszego pisania) niż wtedy. – fho
Oh ... ale 'liftAn' jest zdefiniowane tylko do' n = 3'. Posiadanie składniowego cukru stosowanego w Idrisie byłoby teraz miłe. – fho