%export mapper
        uniformly add_case create_mapper mapper_contents union
abstype mapper **
with uniformly :: ** -> mapper **
     add_case :: (num, **) -> mapper ** -> mapper **
     create_mapper :: (num -> **) -> mapper **
     mapper_contents :: mapper ** -> (num -> **)
     union :: ** -> mapper ** -> mapper ** -> mapper **
     showmapper :: (** -> [char]) -> mapper ** -> [char]

  mapper ** == num -> **
    uniformly b a = b
    add_case (a,b) m a = b
    add_case (a,b) m a' = m a'
    create_mapper = id
    mapper_contents = id
    union b m1 m2 a = m1 a, m1 a ~= b
                    = m2 a, otherwise
    showmapper showrange m = "MAPPER WITH: " ++ splurge showrange 0 m
                             where
                             splurge showrange n m
                               = (show n)++"->"++(showrange (m n))
                                 ++ "; " ++ splurge showrange (n+1) m
