| namespace Foo | |
| protected def x := 10 | |
| end Foo | |
| open Foo | |
| #check x -- error unknown identifier `x` | |
| #check Foo.x | |
| namespace Bla.Foo | |
| protected def y := 20 | |
| def z := 30 | |
| end Bla.Foo | |
| open Bla | |
| #check Foo.y | |
| open Bla.Foo | |
| #check y -- error unknown identifier `y` | |
| #check z | |
| protected def x := 0 -- Error | |
| protected partial def Foo.f (x : Nat) := | |
| if x > 0 then f (x-1) * 2 else 1 -- Error | |
| protected partial def Bla.f (x : Nat) := | |
| if x > 0 then Bla.f (x-1) * 2 else 1 | |
| #eval Bla.f 3 | |
| namespace Foo | |
| protected partial def g (x : Nat) := | |
| if x > 0 then g (x-1) * 2 else 1 -- error | |
| end Foo | |
| namespace Bla | |
| protected partial def g (x : Nat) := | |
| if x > 0 then Bla.g (x-1) * 2 else 1 | |
| #eval g 3 -- error | |
| #eval Bla.g 3 | |
| end Bla | |
| def S (σ : Type) (m : Type → Type) (α : Type) := | |
| σ → m (α × σ) | |
| namespace S | |
| variables {σ : Type} {m : Type → Type} [Monad m] {α : Type} | |
| protected def pure (a : α) : S σ m α := | |
| fun s => pure (a, s) -- This `pure` is the top-level one. The `pure` being defined here is called `S.pure`. | |
| end S |