This is a partial application of the composition operator to the composition itself. In the general case, we know that if we apply (.) To some function f :: x -> y , then
>>> :t (.) f (.) f :: (a -> x) -> a -> y
due to the way the types are arranged:
(b -> c) -> (a -> b) -> a -> c x -> y -------------------------------- (a -> x) -> a -> y
We discard the first argument and replace the remaining occurrences of b and c corresponding types of this argument.
Here f again is simply (.) , Which means that we identify x ~ (b -> c) and y ~ (a -> b) -> a -> c . Re-aligning types
(a -> x ) -> a -> y b -> c (a -> b) -> a -> c
Since a occurs above and below, we need to select a new variable name for a below; GHC chose a1 :
(a -> x ) -> a -> y b -> c (a1 -> b) -> a1 -> c
Putting the two together gives the type that you see in GHCi.
(a -> b -> c) -> a -> (a1 -> b) -> a1 -> c
Anatomy jokes aside, what is (.)(.) ?
Say you have a function f :: a -> b , but you need a function g :: a -> c , that is, you want f , but with a different return type. The only thing you can do is find the helper function h :: b -> c , which converts the return value for you. Your g function is just a composition of h and f :
g = h . f
However, you may have a more general function h' :: t -> b -> c , which can turn values ββof type b into values ββof type c several ways, depending on the value of some argument x :: t . Then you can get many different g depending on this argument.
g = (h' x) . f
Now, given h' , x and f , we can return our g , so we write a function that does this: a function that "contributes" to the return value of f from a value of type b by a value of type c specified by the function h' and some value x :
promote h' xf = (h' x) . f
You can mechanically convert any function to non-contact form; I am not familiar with the details, but using PointFree.io produces
promote = ((.) .)
which is only a partial application (.) (.) written as a section, i.e.:
((.) (.)) h' xf == (h' x) . f
So, our boobs operator is just a generalized pre-layout operator.