[m-users.] Document "Module typeclasses should be instantiated in the interface"

Peter Wang novalazy at gmail.com
Fri May 14 22:09:46 AEST 2021


On Fri, 14 May 2021 12:59:36 +0200 fabrice nicol <fabrnicol at gmail.com> wrote:
> 
> Stimulated piece of coding.
> 
> If I understand you well, there might be convoluted cases in which an 
> exported typeclass, without an abstract instance in the interface, could 
> probably be used in a parent file if the type instantiation is somehow 
> bootstrapped (or 'lifted up') by existential quantification plus symbol 
> export in the interface of the module. But (reassuringly?) this does not 
> work. Yes, your module m1 does build into a library, but the ominous 
> "unsatisfiable typeclass contraint" error message pops up again if you 
> try to import module m1 into a parent file and use 'eval' like this:

It was intended to be used in this way:

    :- import_module m1.

    main(!IO) :-
	Foo = make_foo,
	eval_foo(Foo, I),
	io.format("this int: %d\n", [i(I)], !IO).

Peter


More information about the users mailing list