[Ur] Repeated datatype declarations
Adam Chlipala
adamc at impredicative.com
Wed Oct 12 07:44:50 EDT 2011
Ron de Bruijn wrote:
> Op 12-10-11 09:41, Gergely Buday schreef:
>>> Why do datatype declarations have to be repeated in the
>>> implementation file
>>> (.ur) when they are already specified in the interface file (.urs)?
>>
>> They serve different purposes, in the .urs file they are interface
>> declarations, in the .ur file they are implementation declarations,
>> this is how I see them.
>>
>> - Gergely
> If that would be the case there would be a mechanism to mark some
> datatypes as being exported and some others as not exported.
> Currently, 'marking' is copying the whole datatype definition, which
> is completely against http://en.wikipedia.org/wiki/Don't_repeat_yourself .
True in a sense, but it doesn't bother me so much. Datatypes can be
repeated with different types between implementation and interface; for
instance, the interface can use an abstract type where the
implementation uses a concrete type.
You also have the option of defining datatypes in .ur files without .urs
files, and you can even import these datatypes into other modules with
the [datatype foo = datatype M.bar] form.
Filling in datatype definitions for implementations would complicate the
language, and the real practical win seems small, so it's not on my
to-do list. I would consider carefully a patch someone contributed
adding the sort of functionality you suggest.
> (Also, just because Standard ML does it in this way, doesn't mean it
> is the best known way to do it. )
True, but I don't hear ML programmers (including OCaml, too) complaining
about it, which may provide evidence that you'll get used to it and
actually like it as a simplification of the semantics. Haskell does not
have a solution to the problem, because its "module system" is so
inexpressive. It is not obvious to me how to follow your suggestion in Ur.
More information about the Ur
mailing list