import std.stdio;

T[] find(alias pred, T)(T[] input)
    if (is(typeof(pred(input[0])) == bool))
{
    for (; input.length > 0; input = input[1 .. $])
    {
        if (pred(input[0])) break;
    }
    return input;
}

unittest
{
    int[] a = [ 1, 2, 3, 4, -5, 3, -4 ];
    // Найти первое отрицательное число
    auto b = find!(function bool(int x) { return x < 0; })(a).dup;
    writeln(b);
    auto c = find!((x) { return x > 0; })(b);
    writeln(c);
    string[] str = ["one", "two", "ab", "three", "four"];
    auto d = find!((x) { return x.length == 2; })(str);
    writeln(d);
}
