== Quote from Johann MacDonagh (johann.macdonagh...@spam.gmail.com)'s article > However, for what you want, you can use std.algorithm.filter
OK. Followed your advice and this is what I've got so far: import std.algorithm; import std.file; import std.stdio; void main(string[] args) { auto needle = boyerMooreFinder(args[1]); foreach (string name; dirEntries(".", SpanMode.shallow)) { if (name[$-3 .. $] == "txt") { writeln(name); string text = readText(name); auto haystack = filter!("a >= '0' && a <= '9'")(text); auto result = find(haystack, needle); writeln(result); } } } Passing the haystack filter to find() produces the following error: ..\..\src\phobos\std\algorithm.d(2912): Error: function std. algorithm.BoyerMooreFinder!(result,string).BoyerMooreFinder.beFound (string haystack) is not callable using argument types (Filter!(result,string)) ..\..\src\phobos\std\algorithm.d(2912): Error: cannot implicitly convert expression (haystack) of type Filter!(result,string) to string ..\..\src\phobos\std\algorithm.d(2912): Error: cannot implicitly convert expression (needle.beFound((__error))) of type string to Filter!(result,string) search_seq.d(12): Error: template instance std.algorithm.find!(Filter!(result,string),result,string) error instantiating What could be the problem? Thanks