@Kha I tried to fix a few issues with private names. The new test
tries to cover them. If you have more, please create an issue.
1- Scoping. A private declaration should shadow one in a previous scope.
2- We should not be able to define the same `private` in the same
module more than once.
```
private def x := 10
private def x := "hello" -- should produce error here
```
3- Dot-notation should work with private declarations in the module
where they were defined.
4- The following should work
```
namespace N
private def x := 10
end N
#check N.x
```
5- The following should **not** work
```
def y := 10
private def y := "hello" -- produce error
private def z := 10
def z := "hello" -- produce error
```
BTW, I am happy to change this behavior. I just mimicked C's
behavior for `static`.
It is not clear whether the following should work or not.
```
namespace N
private def b := 10
end N
open N
#check b
```
13 lines
469 B
Text
13 lines
469 B
Text
Bla.foo=="world" : Bool
|
|
private.lean:14:8: error: private declaration 'Bla.foo' has already been declared
|
|
foo==0 : Bool
|
|
Bla.foo : String
|
|
Boo.Bla.boo=="world" : Bool
|
|
Boo.Bla.boo++"world" : String
|
|
Boo.Bla.boo=="world" : Bool
|
|
Boo.boo==100 : Bool
|
|
Boo.Bla.boo=="world" : Bool
|
|
Boo.boo==100 : Bool
|
|
Nat.mul10 x : Nat
|
|
private.lean:65:8: error: a non-private declaration 'y' has already been declared
|
|
private.lean:68:0: error: a private declaration 'z' has already been declared
|