Version française
Home     About     Download     Resources     Contact us    
Browse thread
[Caml-list] Functors and classes
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: brogoff <brogoff@s...>
Subject: Re: [Caml-list] Functors and classes
On Tue, 3 Aug 2004, John Prevost wrote:
> Oops.  A couple of errors in that last thing I wrote that weren't the
> problem I was trying to illustrate (that's what I get for trying fixes
> inline before giving up):
>
> module type ThingPoolT =
>   sig
>     type connection
>     val connect : unit -> connection
>     val test : connection -> int
>   end
>
> module ThingPool (Thing : ThingIntf) :
>     (ThingPoolT with type connection = Thing.connection) =
>   struct
>     type connection = Thing.connection
>     let connect () = Thing.connect ()
>     let test x = x#a + 1
>   end

Certainly if you're going to call method a it needs to be exposed. If I
understand the problems you're trying to demonstrate, the following would be
my stab at it. Untested code, caveat emptor, blah blah blah...

module type ThingIntf =
  sig
    type 'a connection =
        'a constraint 'a = < a: int; connect : unit -> 'a connection; ..>
    val connect : unit -> 'a connection
  end;;

module type ThingPoolT =
  sig
    include ThingIntf
    val test : 'a connection -> int
  end;;

module ThingPool (Thing : ThingIntf) : ThingPoolT =
  struct
    include Thing

    let connect () =
      let conn = Thing.connect () in
      ignore (conn#a);
      conn

    let (test : _ connection -> int) = fun x -> x#a + 1
  end;;

-- Brian

-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners