use get_underlying_type instead of manually applying abstract type parameters (closes #2657)