pub fn described<A, B, P: Named + 'static>(
items: &[A],
pieces_of: fn(&A) -> &'static [Piece<P>],
word_of: fn(&A) -> fn(&B) -> &'static [Piece<P>],
arg: &B,
first: &str,
second: &str,
third: &str,
blank: &str,
) -> Vec<String>