[mercury-users] currying does not work with higher order predicates ?

Holger Krug hkrug at rationalizer.com
Tue Jul 24 16:56:27 AEST 2001


I currently make some changes to moose to "allow the parsing state to
be unique (so that it can contain the io:state, just for example)."

To this purpose it tried to modify existing moose code to something like:

	{ WriteXForm = (pred(InMode::in, OutMode::in, XForm::in, di, uo) 
		is det -->
		{ XForm = xform(NT, MethodName) },
		{ lookup(Decls, NT, RuleDecl) },
		{ RuleDecl = rule(_NT, Types, VarSet, _Context) },
		io__write_strings(["\tpred ", MethodName, "("]),
		io__write_list(Types, ", ", term_io__write_term(VarSet)),
		( { Types \= [] } -> io__write_string(", ") ; [] ),
		io__write_string("T, T),\n"),

		io__write_strings(["\tmode ", MethodName, "("]),
		io__write_list(Types, ", ", WriteIn),
		( { Types \= [] } -> io__write_string(", ") ; [] ),
		io__write_string(InMode),
		io__write_string(", "),
		io__write_string(OutMode),
		io__write_string(") is det")
		)
	},
	( { UniqueModes = yes } ->
#279	    io__write_list(XForms, ",\n", WriteXForm("di", "uo"))
	;
#281	    io__write_list(XForms, ",\n", WriteXForm("in", "out"))
	),

#xxx are the line numbers.

I get the following error messages:

moose.m:279: In clause for predicate `moose:write_action_type_class/6':
moose.m:279:   in argument 3 of call to predicate `io:write_list/5':
moose.m:279:   in unification of argument
moose.m:279:   and term `''(WriteXForm, V_46, V_47)':
moose.m:279:   type error in argument(s) of functor `/3'.
moose.m:279:   Argument 1 (WriteXForm) has type `pred(string, string, (grammar:xform), (io:state), (io:state))',
moose.m:279:   expected type was `(func(V_30, V_29) = V_31)'.
moose.m:281: In clause for predicate `moose:write_action_type_class/6':
moose.m:281:   in argument 3 of call to predicate `io:write_list/5':
moose.m:281:   in unification of argument
moose.m:281:   and term `''(WriteXForm, V_50, V_51)':
moose.m:281:   type error in argument(s) of functor `/3'.
moose.m:281:   Argument 1 (WriteXForm) has type `pred(string, string, (grammar:xform), (io:state), (io:state))',
moose.m:281:   expected type was `(func(V_31, V_30) = V_32)'.

It seems as if currying is not allowed for higher order predicates.
Is this assumption correct or did I make some other kind of error ?

 -- 
Holger Krug
hkrug at rationalizer.com
--------------------------------------------------------------------------
mercury-users mailing list
post:  mercury-users at cs.mu.oz.au
administrative address: owner-mercury-users at cs.mu.oz.au
unsubscribe: Address: mercury-users-request at cs.mu.oz.au Message: unsubscribe
subscribe:   Address: mercury-users-request at cs.mu.oz.au Message: subscribe
--------------------------------------------------------------------------



More information about the users mailing list