$\begingroup$

apply1 : (a -> b) -> Foo a -> b apply2 : (a -> b -> c) -> Bar a b -> c apply3 : (a -> b -> c -> d) -> Baz a b c -> d

As you see there is a repeating pattern, we obtain a function and a data structure, then we apply that function and return its result...

Is it possible to abstract over this pattern with Pattern Calculus?