G :: Type = data male | female MaleNames :: Type = data Tom | Jim FemaleNames :: Type = data Jill | Sara Name (g:: G) :: Type = case g of { (male) -> MaleNames; (female) -> FemaleNames;} select :: (g:: G) -> Name g = \(g::G) -> case g of { (male) -> Tom@_; (female) -> Jill@_;}