[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: ocaml-dns- quick ocaml question
So cstruct shouldnt be a constraint; it's trivial to retarget to polymorphic variants. There is a very slight performance hit, but I don't think that matters. GADTs: I don't see how they help here; did you have anything in mind Raphael, or was it a general "new shiny feature"? :-) -anil On 18 Jun 2012, at 18:42, Richard Mortier <Richard.Mortier@xxxxxxxxxxxxxxxx> wrote: > > On 18 Jun 2012, at 18:38, Raphael Proust wrote: > >> On Mon, Jun 18, 2012 at 5:26 PM, Richard Mortier >> <Richard.Mortier@xxxxxxxxxxxxxxxx> wrote: >>> i have two types, rr_type and q_type. rr_type is a subset of q_type, >>> extended it by about 5 elements. both are currently implemented in >>> Dns.Packet as cenums which are translated to variant types. >>> >>> i've just realised that (of course?) this means that the last definition >>> (rr_type) overrides the first (q_type) as they have overlapping elements. >>> >>> is there a nice/idiomatic way around this without either going to >>> polymorphic variant types (that's what the `T types are called, right?) or >>> just defining the cenum q_type with rr_type aliased to it (for slightly >>> better readability), and using that everywhere? >>> >>> eg., should i do something like create submodules Qtype and RRtype of >>> Packet, and define cenum t in each? >> >> >> I see several possibilities: >> >> - use polymorphic variants (yes that's what `Ts are called) > > unfortunately cstruct targets variants only at the moment. > >> - use one variant type and add assertion checks or other dynamic failure >> (bad!) > > ack- i thought that didn't "feel" right :) > >> - use several submodules >> >> - prefix the variants (very common) (feels similar to submodules but prevents >> "open"-induced ambiguities) >> type q = >> | Q_Foo >> | Q_Bar of int >> type rr = >> | RR_Foo >> | RR_Bar of int >> | RR_Baz of float > > ok- i'll probably go with one of these options then. (likely the latter.) > > was just wondering if there was a "better" way. > >> - use GADTs (requires OCaml 4.00 (still in beta)) (I am unsure of the proper >> syntax, check the manual if need be) >> type q >> type rr >> type 'a t = >> | Foo : 'a t >> | Bar : int -> 'a t >> | Baz : float -> q t (* This branch forces the ['a] to be instantiated with >> [q], thus preventing anyuse with functions requiring >> [rr t] >> *) > > interesting! but possibly a little advanced for me for now :) > > thanks! > > -- > Cheers, > > R. > > > > > This message and any attachment are intended solely for the addressee and may > contain confidential information. If you have received this message in error, > please send it back to me, and immediately delete it. Please do not use, > copy or disclose the information contained in this message or in any > attachment. Any views or opinions expressed by the author of this email do > not necessarily reflect the views of the University of Nottingham. > > This message has been checked for viruses but the contents of an attachment > may still contain software viruses which could damage your computer system: > you are advised to perform your own checks. Email communications with the > University of Nottingham may be monitored as permitted by UK legislation.
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |