On Tue, 28 Apr 2015 21:45:07 +0000, PhilipDaniels wrote: > Beginner question. Given > > if (startsWith(input, "0x", "0X")) > > How do I turn that into a case-insensitive startsWith? startsWith says > it takes a predicate but I can't figure out how to pass it one. The > examples all use "a == b" !? These attempts below, and other things I > have tried, fail with "cannot deduce function from argument types". > > if (startsWith!"icmp(a, b) == 0"(input, "0x")) > if (startsWith!"std.uni.icmp(a, b) == 0"(input, "0x")) > if (startsWith!((a,b) => icmp(a,b) == 0)(input, "0x"))
The issue is that those icmp functions take strings as arguments while startsWith expects the predicate to take individual characters. I believe the best solution here is to use the lazy toLowerCase function in std.uni and the default predicate: if (startsWith(input.toLowerCase, "0x".toLowerCase))