[m-users.] Error: non-abstract instance declaration in module interface.
Sean Charles (emacstheviking)
objitsu at gmail.com
Thu Feb 3 09:47:39 AEDT 2022
Hi Zoltan,
Yes, that fixed it! I moved the instance declaration and it's all singing beautifully.
Thank you once again,
Sean
> On 2 Feb 2022, at 22:08, Zoltan Somogyi <zoltan.somogyi at runbox.com> wrote:
>
>
> 2022-02-03 08:39 GMT+11:00 "Sean Charles (emacstheviking)" <objitsu at gmail.com>:
>> Here is my awful attempt, syntax_error, error_msg are types defined elsewhere as is the function nowhere,
>
> Actually, that attempt is not awful; it is in fact pretty good.
>
>> :- typeclass tstring(T) where [
>> func make_error(T::in, error_msg::in) = (syntax_error::out) is det
>> ].
>>
>> :- instance tstring(leaf) where [ LINE 73 <===
>> make_error(_X, E) = syntax_error(nowhere, error, E)
>> ].
>>
>> ...which gives this error:
>>
>> datatypes.m:073: Error: non-abstract instance declaration in module interface.
>> Making Mercury/ints/datatypes.int
>> datatypes.m:073: Error: non-abstract instance declaration in module interface.
>> ** Error making `Mercury/ints/datatypes.int'.
>> make[2]: *** [felt] Error 1
>
> If you got that error, then line 73 was in the interface section of its module.
> Instance declarations that specify the implementations of the class methods
> are allowed only in the implementation sections of their module; interface
> sections may contain only *abstract* instance declarations, which do not do so.
> In this case, you should move the instance declaration above to the implementation
> section, and replace it in the interface with its abstract version, which is
> just ":- instance tstring(leaf).".
>
> This requirement should have been described in section 10.2 of the
> reference manual, but I see it hasn't been. I will look into fixing that,
> and will also add a mention of this fix to the above error message.
>
> Zoltan.
More information about the users
mailing list