No GADTs necessary