## 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.