This is syntactic sugar, similar to that for functions (ie, let f x y = ...
is shorthand for let f = fun x -> fun y -> ...
). The motivation is presumably that in the long form multiple argument functors become quite hard to read:
module type A = sig end
module type B = sig end
module type C = sig end
module Foo (A:A) (B:B) (C:C) = struct
end
module Foo2 = functor (A:A) -> functor (B:B) -> functor (C:C) -> struct
end