## Lexical Scope in Parable

I need to define a standard approach to lexical scoping in Parable sources. I have implementations for several things, which I'll show off briefly here.

### Option 1

This takes a list of functions that should be hidden. It has a nice side effect of being able to create the headers for these up front, so variables can be used immediately:

   [ 'Source' 'Dest' ] {
       [ "pp-n"  !Dest !Source ... ] 'foo' define
   }

When } is executed, only the 'foo' is left visible.

### Option 2

Like the first option, this takes a list, but the list is the headers to keep. Unlike the first, it does not create the headers up front:

   [ 'foo' ] {
       [ 'Source' 'Dest' ] variables
       [ "pp-n"  !Dest !Source ... ] 'foo' define
   }

### Option 3

I use this syntax in Retro:

   {
       [ 'Source' 'Dest' ] variables
   ---reveal---
       [ "pp-n"  !Dest !Source ... ] 'foo' define
   }

Anything before the ---reveal--- is hidden.

### Option 4

A variation on Option 2,  this puts the list of headers to keep before the }:

   {
       [ 'Source' 'Dest' ] variables
       [ "pp-n"  !Dest !Source ... ] 'foo' define

       [ 'foo' ]
   }

### Option 5

A hybrid of Options 1 & 2:

   [ 'Source' 'Dest' ] {
       [ "pp-n"  !Dest !Source ... ] 'foo' define

       [ 'foo' ]
   }

This one allows creation of variables up front and also hides any other non-specified headers.

### Option 6

Use a keyword to mark functions as private, } will hide them:

   {
       'Source' variable private
       'Dest' variable private

       [ "pp-n"  !Dest !Source ... ] 'foo' define
   }

### Option 7

Somewhat inspired by the Retro style syntax, but more flexible:

   {
     private:
       [ 'Source' 'Dest' ] variables
     public:
       [ "pp-n"  !Dest !Source ... ] 'foo' define
   }

This could allow for multiple public/private sections within a scoped area.