[Camllist] polymorphic variant typing question

skaller
 Damien
[
Home
]
[ Index:
by date

by threads
]
[ Message by date: previous  next ] [ Message in thread: previous  next ] [ Thread: previous  next ]
[ Message by date: previous  next ] [ Message in thread: previous  next ] [ Thread: previous  next ]
Date:   (:) 
From:  Damien <Damien.Pous@e...> 
Subject:  Re: [Camllist] polymorphic variant typing question 
On 11 Sep 2004 17:49:25 +1000 skaller wrote: > Consider this: > [...] > What this does is extend the regular expression > type to allow a group combinator, but then reduce it > by using left/right bracket codes. This typing > compiles. > > Question: how can I replace the last two lines of > the match with something which just handles 'all the > rest of the cases'? > > Do I have to factor the original regexp_t into invariant > and variant parts?? I think yes... I often use the following scheme : << (* invariant type *) type t = [ `A  `B ] (*** first level ***) type 'x v1 = [ t  `C of 'x ] type t1 = 'x v1 as 'x (* open recursion with r *) let r1 r = function  #t as x > x  `C x > `C (r x) (* close the recursion for use at the first level *) let rec f1: t1 > t1 = fun x > r1 f1 x (*** second level ***) type 'x v2 = [ 'x v1  `D of 'x ] type t2 = 'x v2 as 'x (* open recursion (use the previous open recursion) *) let r2 r = function (*  `C x > `D (r x) (* possible overriding of the `C case *) *)  #v1 as x1 > r1 r x1  `D x > `D (r x) (* close the recursion at the second level *) let rec f2: t2 > t2 = fun x > r2 f2 x (* second to first level (similar to your groupify function) *) let r21 r = function  #v1 as x1 > r1 r x1 (* first level recursion *)  `D x > `C (r x) (* convert GROUPS into brackets here... *) let rec f21: t2 > t1 = fun x > r21 f21 x >> You may be interested by this paper from Jacques Garrigue : <http://wwwfun.kurims.kyotou.ac.jp/~garrigue/papers/variantreuse.pdf> Hope this helps, damien  To unsubscribe, mail camllistrequest@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/camlbugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners