[mercury-users] unresolved polymorphism in read_term_from_string

Julien Fischer juliensf at csse.unimelb.edu.au
Sun Feb 12 16:52:30 AEDT 2012


Hi,

On Sat, 11 Feb 2012, Jeff Thompson wrote:

> Hello again.  I've been working with the code parser, and gratified that it 
> does what I expect.  The code below correctly outputs "test".  However, the 
> predicate is declared as
> :- pred read_term_from_string(string::in, string::in, posn::out, 
> read_term(T)::out) is det.
>
> and the compiler outputs the warning:
> test.m:004: In predicate `main'/2:
> test.m:004:   warning: unresolved polymorphism.
> test.m:004:   The variables with unbound types were:
> test.m:004:     V_14: term.term(T)
> test.m:004:     V_8: list.list(term.term(T))
> test.m:004:     V_6: varset.varset(T)
> test.m:004:     Term: term_io.read_term(T)
> test.m:004:   The unbound type variables will be implicitly bound to the
> test.m:004:   builtin type `void'.
>
> Do I need to bind the type T to `void' when calling read_term_from_string? 
> If so, how?

You can't, the compiler is telling you that that is what *it* is doing in
this case.  It is doing that because it cannot infer a binding for the
type variable T.  There are two things you can do about this:

(1) ignore the issue by invoking mmc with the
     --no-warn-unresolved-polymorphism option.

(2) Provide some extra type information that allows the compiler to
infer a binding for T.

In a bit more detail:

The problem arises becuase the type of the 4th argument (Term) of the goal

    read_term_from_string("", "test.", _Posn, Term)

is read_term(T).  There is nothing else in the remainder of this program
that provides a binding for T.

Solution (2) involves using the with_type operation, ':', to annotate
the 4th argument of read_term_from_string with enough type information
to allow the binding for T to be determined, for example,

    read_term_from_string("", "test.", _Posn, Term : read_term(generic))

(generic/0 is defined in the term module.)

Julien.
--------------------------------------------------------------------------
mercury-users mailing list
Post messages to:       mercury-users at csse.unimelb.edu.au
Administrative Queries: owner-mercury-users at csse.unimelb.edu.au
Subscriptions:          mercury-users-request at csse.unimelb.edu.au
--------------------------------------------------------------------------



More information about the users mailing list