[m-users.] Question regarding predicates stored in existential data types.
Philip White
philip at pswhite.org
Wed Feb 17 13:57:12 AEDT 2021
Hello,
below is the type I have:
:- type flag(T)
---> flag(
flag_doc :: string,
flag_name :: string,
flag_kind :: flag_kind(T)
)
; return_flag(T)
; some [A] map1_flag(flag(A), pred(A::in, T::out) is det)
; some [A, B] map2_flag(flag(A), flag(B), pred(A::in, B::in, T::out) is det).
When I deconstruct a value in the map2_flag case, and then try to call
it, I'm getting the error:
variable F [the variable that corresponds to the predicate part the
value] has instiatedness `ground', expecting higher-order pred inst of
arity 3.
Is the problem that 'ground' is not the same as pred(in, in, out) is
det? I tried making a new inst for flag that makes everything ground,
except the predicate part, for which it uses a predicate instantiation.
However, this turned into a mess of errors, so I'm not sure if I'm even
on the right track.
One thing I don't understand is why there needs to be a separate kind
of inst predicates. Why are ground and free not enough? Perhaps this
misunderstanding is the root the problem here?
Thanks,
Philip
More information about the users
mailing list