make shared parsers generic over the user type