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!"...
--
Vincent Aravantinos
Postdoctoral Fellow, Concordia University, Hardware Verification Group
http://users.encs.concordia.ca/~vincent
--
Caml-list mailing list. Subscription management and archives:
https://sympa-roc.inria.fr/wws/info/caml-list
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs