translateLabelEx :: ScopeInformation -> L1.SrcSpan -> L2.L2NamespaceID -> L1.L1RelOrAbsPathPossiblyIntEnd -> ModelTranslation L2.L2Expression
translateLabelEx scope _ nsid (L1.L1RelOrAbsPathInt pss ra rp v) = do
  nsid' <- findNamespaceByRAPath pss nsid (L1.L1RelOrAbsPath pss ra rp)
  when (nsid' /= nsInteger && nsid' /= nsNatural) . fail $
    "Literal integer syntax can only be used to refer to labels in the \
    \built in Integer and Natural domains(e.g. Natural:1), so usage at " ++
    (show pss) ++ " is invalid."
  when (nsid' == nsNatural && v < 0) . fail $
    "Attempt to reference a negative natural number, at " ++ (show pss)
  return . L2.L2ExReferenceLabel pss $ L2.L2Label nsid' (fromIntegral v)
translateLabelEx :: ScopeInformation -> L1.SrcSpan -> L2.L2NamespaceID -> L1.L1RelOrAbsPathPossiblyIntEnd -> ModelTranslation L2.L2Expression
translateLabelEx scope _ nsid (L1.L1RelOrAbsPathInt pss ra rp v) = do
  nsid' <- findNamespaceByRAPath pss nsid (L1.L1RelOrAbsPath pss ra rp)
  when (nsid' /= nsInteger && nsid' /= nsNatural) . fail $
    "Literal integer syntax can only be used to refer to labels in the \
    \built in Integer and Natural domains(e.g. Natural:1), so usage at " ++
    (show pss) ++ " is invalid."
  when (nsid' == nsNatural && v < 0) . fail $
    "Attempt to reference a negative natural number, at " ++ (show pss)
  return . L2.L2ExReferenceLabel pss $ L2.L2Label nsid' (fromIntegral v)
translateLabelEx scope _ nsid (L1.L1RelOrAbsPathInt pss ra rp v) = do
  nsid' <- findNamespaceByRAPath pss nsid (L1.L1RelOrAbsPath pss ra rp)
  when (nsid' /= nsInteger && nsid' /= nsNatural) . fail $
    "Literal integer syntax can only be used to refer to labels in the \
    \built in Integer and Natural domains(e.g. Natural:1), so usage at " ++
    (show pss) ++ " is invalid."
  when (nsid' == nsNatural && v < 0) . fail $
    "Attempt to reference a negative natural number, at " ++ (show pss)
  return . L2.L2ExReferenceLabel pss $ L2.L2Label nsid' (fromIntegral v)