public static String mkString(Collection<String> c, final String sep) {
		if (c.isEmpty()) {
			return "";
		}
		
		String head = c.iterator().next();
		Collection<String> tail = new ArrayList<String>(c);
		tail.remove(head);
		
		return reduce(tail, new Function2<String, String>() {
			@Override
			public String apply(String a, String b) {
				return a + sep + b;
			}
		}, head);
	}