Есть функция для Haskell в стандартной библиотеке, которая принимает три функции и возвращает функцию, которая применяет возвращаемые значения первых двух функций третьей функции, что-то вроде этого:Compose функции в другую функцию
compact :: (a -> b) -> (a -> c) -> (b -> c -> d) -> a -> d
compact a b c = \x -> c (a x) (b x)
Или это:
import Control.Arrow
compact' :: (a -> b) -> (a -> c) -> (b -> c -> d) -> a -> d
compact' a b c = uncurry c . (a &&& b)
Так что:
compact (take 1) (drop 2) (++) [1,2,3,4] == [1,3,4]
compact (+10) (*2) (<) 11 == True
compact (+10) (*2) (<) 9 == False
, что также 'с. a <*> b'. –