[m-users.] Cannot execute a predicate from a Discriminated Union
Charles Shuller
charles.shuller at gmail.com
Sun Jun 28 07:47:22 AEST 2015
Hello All,
I can't get a predicate to execute from a discriminated union after passing
the type as a parameter into a predicate. Though it works just fine from
main.
I've tried everything I can think of with modes and insts on the DU, but
nothing has worked, any insight would be much appreciated.
:- type test
---> test(test_name::string,
test_pred::pred(disposition)).
:- pred execute_test(test::in, disposition::out, io::di, io::uo) is det.
execute_test(Test, Disposition, !IO) :-
call(Test^test_pred, Disposition), %% Compilation fails here
Disposition = fail(Test^test_name ++ " Failed to execute").
main(!IO) :-
Test = test("PassTest", pass_test),
call(Test^test_pred, Disposition). %% This works just fine though
Compiler Output (14.01.1)
----------------------------------------------------------------------------
manual_test.m:044: In clause for `execute_test(in, out, di, uo)':
manual_test.m:044: in argument 1 (i.e. the predicate term) of higher-order
manual_test.m:044: predicate call:
manual_test.m:044: mode error: variable `V_10' has instantiatedness
`ground',
manual_test.m:044: expecting higher-order pred inst (of arity 1).
Thanks!
Charles
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mercurylang.org/archives/users/attachments/20150627/9be06a45/attachment.html>
More information about the users
mailing list