A while ago I grumbled about pretty printing of types in PolyML. I have
just managed to condense my code into a sensibly viewable example which
illustrates what I think the problem is:

signature N = sig type T end;

signature A
= sig
  type T
  structure Ns : N sharing type Ns.T = T
  val mk : T
  val afoo : T -> T
end;

signature B = sig include A val bfoo : T -> T end;

structure As : A
= struct
  structure Ns = struct type T = string; end;
  type T = string
  val mk = "*"
  fun afoo s = s ^ "a";
end;

structure Bs : B
= struct
  open As;
  fun bfoo s = s ^ "b";
end;

structure SafeBs :> B = Bs;


Observe the output from PolyML for the signature SafeBs. It prints it
out wrongly. And I think this is to do with the sharing constraint:
without it, I get what I expect:

structure SafeBs :
  sig
    structure Ns : N
    type T
    val afoo : SafeBs.T -> SafeBs.T
    val bfoo : SafeBs.T -> SafeBs.T
    val mk : SafeBs.T
  end

However, with the sharing constraint, I get:

structure SafeBs :
  sig
    structure Ns : N
    type T
    val afoo : A.T -> A.T
    val bfoo : A.T -> A.T
    val mk : A.T
  end

I think, given that SafeBs is hiding the types, printing A.T is very
confusing, one might even be tempted to say wrong.

I would ideally like to have some programmatic control over the
printing; perhaps choosing the left or right hand side of the last
sharing constraint to be the name of the type that it printed.

would be lovely if this was easy to fix - it would help my understanding
of type errors enormously! :)

cheers,
lucas
_______________________________________________
polyml mailing list
[email protected]
http://lists.inf.ed.ac.uk/mailman/listinfo/polyml

-- 
The University of Edinburgh is a charitable body, registered in
Scotland, with registration number SC005336.

Reply via email to