Files
mercury/tests/hard_coded/curry.m
Fergus Henderson afa09e8073 Rename some things to avoid name clashes with functions recently
Estimated hours taken: 0.5

tests/hard_coded/boyer.m:
tests/hard_coded/curry.m:
tests/hard_coded/higher_order_func_test.m:
	Rename some things to avoid name clashes with functions recently
	added to the standard library.  The name clashes resulted in
	ambiguity errors during type checking.
1999-07-08 10:03:55 +00:00

39 lines
1.1 KiB
Mathematica

% Test curried functions.
% This is a regression test: mercury-0.6 failed this test.
:- module curry.
:- interface.
:- import_module io.
:- pred main(io__state::di, io__state::uo) is det.
:- implementation.
:- import_module list, int.
main -->
io__write_string("Hello, world\n"),
{ _ = my_map(curry2(my_append), [[1],[2],[3]]) },
{ _ = my_map(curry2(my_plus), [1,2,3]) }.
:- func my_append(list(T), list(T)) = list(T).
my_append(A, B) = C :- list__append(A, B, C).
:- inst func1 = (func(in) = out is det).
:- func curry2(func(T1, T2) = T3) = (func(T1) = (func(T2) = T3)).
:- mode curry2(func(in, in) = out is det) =
out(func(in) = out(func(in) = out is det) is det).
curry2(F) = ((func(X::in) = (F1::out((func(in) = out is det))) is det) :-
F1 = (func(Y) = apply(F, X, Y))).
:- func my_plus(int, int) = int.
my_plus(A, B) = A + B.
:- func my_map(func(T1) = T2, list(T1)) = list(T2).
% :- mode my_map(func(in) = out is det, in) = out is det.
:- mode my_map(func(in) = out(func(in) = out is det) is det, in) = out is det.
my_map(_F, []) = [].
my_map(F, [X|Xs]) = [apply(F,X)|my_map(F, Xs)].