data G = male | female data MaleNames = Tom | Jim data FemaleNames = Jill | Sara Name (g:: G) :: Set = case g of (male) -> MaleNames (female) -> FemaleNames AllNames:: Set = sig g :: G n :: Name g