<div dir="ltr"><div><div><div>Hello All,<br><br></div>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.<br><br></div>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.<br><br><br>:- type test<br>    ---> test(test_name::string,<br>          test_pred::pred(disposition)).<br><br>:- pred execute_test(test::in, disposition::out, io::di, io::uo) is det.<br>execute_test(Test, Disposition, !IO) :-<br>    call(Test^test_pred, Disposition), %% Compilation fails here<br>    Disposition = fail(Test^test_name ++ " Failed to execute").<br><br>main(!IO) :-<br>    Test = test("PassTest", pass_test),<br>    call(Test^test_pred, Disposition). %% This works just fine though<br><br><br><br></div>Compiler Output (14.01.1)<br>----------------------------------------------------------------------------<br><br><div>manual_test.m:044: In clause for `execute_test(in, out, di, uo)':<br>manual_test.m:044:   in argument 1 (i.e. the predicate term) of higher-order<br>manual_test.m:044:   predicate call:<br>manual_test.m:044:   mode error: variable `V_10' has instantiatedness `ground',<br>manual_test.m:044:   expecting higher-order pred inst (of arity 1).<br><br><br></div><div>Thanks!<br><br></div><div>Charles<br></div></div>