module pattern.primitives; import std.algorithm; import std.range; import std.string; template primitive(primitives...) if(primitives.length > 0) { enum primitive = function string(string input) { return primitives.only .filter!(primitive => input.startsWith(primitive)) .chain(null.only) .takeOne .front; }; } unittest { enum p = primitive!("a", "b", "c"); assert(p("cat") == "c"); assert(p("dog") == null); }