sigUnion :: Sign -> Sign -> Result Sign
sigUnion (Sign {types = t1, ops = o1})
         (Sign {types = t2, ops = o2}) =
  return Sign {types = t1 `Map.union` t2, ops = o1 `Map.union` o2}
sigUnion :: Sign -> Sign -> Result Sign
sigUnion (Sign {types = t1, ops = o1})
         (Sign {types = t2, ops = o2}) =
  return Sign {types = t1 `Map.union` t2, ops = o1 `Map.union` o2}
sigUnion (Sign {types = t1, ops = o1})
         (Sign {types = t2, ops = o2}) =
  return Sign {types = t1 `Map.union` t2, ops = o1 `Map.union` o2}