On 11/09/2011 02:29 AM, Cedric Cellier wrote:
For some
reasons though, despite functors being one of the greatest
strength of the language, we do seam shy to use, recommand or
brag about them. I wonder if this is due to the lack of proper
documentation ?
I don't think there is a lack of proper documentation: it is
introduced right away in the "tutorial" part of the Ocaml manual
(Part I), it is described in the language description (Part II)
and there are a couple of examples in the std lib (Part IV). What
do you think it lacks to be properly documented (at least w.r.t
other features of Ocaml)?
I actually wonder if they just
*look*
too complicated? Maybe because they are verbose?
Each time you define a functor you also have to give the signature
of its argument, which, compared to a simple "include" can look
overkilling.
Concretely:
module A = struct
...
end
module B = struct
include A
...
end
VS
module A = struct
...
end
module type B_INPUT = sig
... (can be big)
end
module Make_B (X:B_INPUT) = struct
...
end
For one module that's fine, but when you start having lots of
modules and intricate interactions between them, that can start to
be a pain in the ass.
In addition, this include->functor switch happens quite often
when you have sources that were not written in the first place
with functors in mind, so this is not an uncommon situation.
I think personally that this verbosity is actually a good thing
because it forces to give some documentation which is particularly
needed when many modules are interacting.
But then this documentation argument is a bit contradictory with
what we sell to beginners when they learn Ocaml: "Ocaml is great
because it has type inference, this removes verbosity!"...