Typos: Contra- and co-variance is prefixed, map function has signature error, must be map[S] ....
merge from catull