refactor: polymorphic checkNotAlreadyDeclared

This commit is contained in:
Leonardo de Moura 2020-08-26 13:42:57 -07:00
parent 497d8592cf
commit de2df5955f

View file

@ -8,6 +8,21 @@ import Lean.Elab.Attributes
namespace Lean
namespace Elab
def checkNotAlreadyDeclared {m} [Monad m] [MonadEnv m] [MonadError m] (declName : Name) : m Unit := do
env ← getEnv;
when (env.contains declName) $
match privateToUserName? declName with
| none => throwError ("'" ++ declName ++ "' has already been declared")
| some declName => throwError ("private declaration '" ++ declName ++ "' has already been declared");
when (env.contains (mkPrivateName env declName)) $
throwError ("a private declaration '" ++ declName ++ "' has already been declared");
match privateToUserName? declName with
| none => pure ()
| some declName =>
when (env.contains declName) $
throwError ("a non-private declaration '" ++ declName ++ "' has already been declared")
namespace Command
inductive Visibility
@ -87,20 +102,6 @@ pure {
attrs := attrs
}
def checkNotAlreadyDeclared (declName : Name) : CommandElabM Unit := do
env ← getEnv;
when (env.contains declName) $
match privateToUserName? declName with
| none => throwError ("'" ++ declName ++ "' has already been declared")
| some declName => throwError ("private declaration '" ++ declName ++ "' has already been declared");
when (env.contains (mkPrivateName env declName)) $
throwError ("a private declaration '" ++ declName ++ "' has already been declared");
match privateToUserName? declName with
| none => pure ()
| some declName =>
when (env.contains declName) $
throwError ("a non-private declaration '" ++ declName ++ "' has already been declared")
def applyVisibility (visibility : Visibility) (declName : Name) : CommandElabM Name :=
match visibility with
| Visibility.private => do