caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
* [Caml-list] Anonymous sum types in functors
@ 2013-06-23  7:16 David Allsopp
  2013-06-23 15:14 ` Xavier Leroy
  2013-06-23 23:15 ` Jacques Garrigue
  0 siblings, 2 replies; 9+ messages in thread
From: David Allsopp @ 2013-06-23  7:16 UTC (permalink / raw)
  To: OCaml List

[-- Attachment #1: Type: text/plain, Size: 1264 bytes --]

I couldn't think of a better way to describe what I'm trying to do, so
forgive the possibly strange subject!

 

In:

 

module IntSet = Set.Make(struct type t = int let compare = compare end)

 

the resulting signature is:

 

sig

  type elt = int

  type t

  ...

 

but in:

 

module FlagSet = Set.Make(struct type t = A | B let compare = compare end)

 

the resulting signature is:

 

sig

  type elt

  type t

  ...

 

i.e. the constructors are hidden (I can see why, but presumably it is a
special case in the type checker?) and the module is essentially useless. I
don't want to define the type external to the module - the idea is that I'd
be able to write Flag1Set.add Flag1Set.CommonFlag Flag1Set.empty and
Flag2Set.add Flag2Set.CommonFlag Flag2Set.empty, etc.

 

I can work around this by writing:

 

module FlagSet =

  struct

    type flag = A | B

    include Set.Make(struct type t = flag let compare = compare end)

  end

 

where the resulting signature is:

 

sig

  type flag = A | B

  type elt = flag

  type t

  ...

 

but I'm wondering:

 

a) Is there a way to do it where you can end up with type elt = A | B (I
think the answer is no?)

b) Is there a syntactically lighter way to write the module definition?

 

 

David


[-- Attachment #2: Type: text/html, Size: 5227 bytes --]

^ permalink raw reply	[flat|nested] 9+ messages in thread
[parent not found: <563607038852382852@orange.fr>]

end of thread, other threads:[~2013-06-25  8:39 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-06-23  7:16 [Caml-list] Anonymous sum types in functors David Allsopp
2013-06-23 15:14 ` Xavier Leroy
2013-06-23 23:15 ` Jacques Garrigue
2013-06-24  9:39   ` David Allsopp
2013-06-24 14:37     ` Kristopher Micinski
2013-06-24 14:41       ` Raphaël Proust
2013-06-24 19:13         ` Kristopher Micinski
2013-06-25  8:39       ` David Allsopp
     [not found] <563607038852382852@orange.fr>
2013-06-23  9:48 ` David Allsopp

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).