learning GADTs