Permutation parsers using higher-kinded polymorphism