Version française
Home     About     Download     Resources     Contact us    
Browse thread
Signature matching question?
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Manuel Fahndrich <maf@m...>
Subject: Signature matching question?

I've run into the following problem with signature matching.

Consider the following module type and module definitions:

module type FOO =
  sig

    type bar

    module A :
  	sig

	  val fresh : unit -> bar

  	end

  end

module Foo : FOO =
  struct

    module A =
      struct
	type t = {foo: int}

	let fresh () = {foo=1}

      end

    type bar = A.t

  end

ocamlc -i test.ml
File "test.ml", line 19, characters 2-133:
Signature mismatch:
Modules do not match:
  sig
    module A : sig type t = { foo: int } val fresh : unit -> t end
    type bar = A.t
  end
is not included in
  FOO
Modules do not match:
  sig type t = { foo: int } val fresh : unit -> t end
is not included in
  sig val fresh : unit -> bar end
Values do not match:
  val fresh : unit -> t
is not included in
  val fresh : unit -> bar


Is this intended behavior, or a bug? I would assume that within a module,
delcarations are treated as an unordered set.
Thus, the compiler should first find all type equivalences before matching
individual types.

-Manuel