An Experiment in Domain Refinement: Type Domains and Type Representations for Logic Programs