mirror of
https://github.com/Mercury-Language/mercury.git
synced 2026-04-25 14:24:11 +00:00
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.
39 lines
1.1 KiB
Mathematica
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)].
|
|
|