⎕session←{ (indented main prompt)←⍵ ⎕rawio←'Welcome to APL9',(⎕ucs 10),prompt indented←≢prompt unindent←{ ⎕rawio←⎕ucs ⍺⍴8 } handleMain←{ 0::⍺ data←⍵ ⎕rawio←data ⎕rawio←⎕ucs 10 ⎕rawio←prompt ≢prompt } handleError←{ 0::⍺ (task (error msg taskname))←⍵ ⎕rawio←error,' in [',(⍕task),':',taskname,']' _←{⎕rawio←': ', msg} IF msg≢'' ⎕rawio←⎕ucs 10 ⎕rawio←prompt ≢prompt } handleQuad←{ 0::⍺ data←⍵ ⎕rawio←data ⎕rawio←⎕ucs 10 ⎕rawio←prompt ≢prompt } handleQuoteQuad←{ 0::⍺ data←⍵ ⎕rawio←data ⍺ } handle←{ 0::⍺ (task (type data))←⍵ indented←⍺ _←indented∘unindent IF (indented>0)∧task≢main indented←indented×task≡main type≡'→': indented handleMain data type≡'!': indented handleError task data type≡'⎕': indented handleQuad data type≡'⍞': indented handleQuoteQuad data ⍵ } {∇ ⍵ handle {1 ⍵}⍇⍬} indented }&'session'⊢0 ⎕self ('APL9> ')