Optimizing "counting" GADTs