adobe
          
a + b # addition
a+b   # addition
a+ b  # addition
a +b  # a(+b) app
          
        
          
x = (y for y in [1,2]) # x: [1,2]
x = y for y in [1,2]   # x: 2
         
        
# lambda          # lambda
-> false          () -> false

// anonymous function
(function(){ return false; });
          
-> false                # lambda
() -> false             # lambda
(-> false)(true)        # inv
(-> false) true         # app
(-> false) () -> true   # app
(-> false)() -> true    # ???
          
        
          
~~-> false                # lambda/~~
~~() -> false             # lambda/~~
(-> false)(true)        # inv
(-> false) true         # app
(-> false) () -> true   # app
(-> false)() -> true    # ???
          
        
          
-> false                # lambda
() -> false             # lambda
~~(-> false)(true)        # inv/~~
(-> false) true         # app
(-> false) () -> true   # app
(-> false)() -> true    # ???
          
        
          
-> false                # lambda
() -> false             # lambda
(-> false)(true)        # inv
~~(-> false) true         # app/~~
(-> false) () -> true   # app
(-> false)() -> true    # ???
          
        
          
# inv              # app
(-> false)(true)   (-> false) true

# javascript
(function(){ return false; })(true);

          
        
          
-> false                # lambda
() -> false             # lambda
(-> false)(true)        # inv
(-> false) true         # app
~~(-> false) () -> true   # app/~~
(-> false)() -> true    # ???
          
        
          
-> false                # lambda
() -> false             # lambda
(-> false)(true)        # inv
(-> false) true         # app
~~(-> false) (() -> true) # app/~~
(-> false)() -> true    # ???
          
        
          
-> false                # lambda
() -> false             # lambda
(-> false)(true)        # inv
(-> false) true         # app
~~(-> false) (-> true)    # app/~~
(-> false)() -> true    # ???
          
        
          
-> false                # lambda
() -> false             # lambda
(-> false)(true)        # inv
(-> false) true         # app
~~(-> false) () -> true   # app/~~
(-> false)() -> true    # ???
          
        
          
-> false                # lambda
() -> false             # lambda
(-> false)(true)        # inv
(-> false) true         # app
~~(-> false) () -> true   # app/~~
~~(-> false)() -> true    # ???/~~
          
        
          
(-> true) () -> false # app
(-> true)() -> false  # ???
          
        
          
(-> true) () -> false # app
~~(-> true)() -> false  # ???/~~
          
        
          
(-> true) () -> false # app
~~(-> true)()/~~ -> false  # ???
          
        
          
(-> true) () -> false # app
~~true/~~ -> false         # ???
          
        
          
(-> true) () -> false # app
~~true -> false/~~         # ???
          
        
          
(-> true) () -> false # app
~~true(-> false)~~        # ???
          
        
          
(-> true) () -> false # app
~~(-> true)() -> false  # inv, app /~~
          
        
          
(-> true~~)☠(/~~) -> false # app
(-> true~~)(/~~) -> false  # inv, app
          
        
          
(-> true) () -> false # app
(-> true)() -> false  # inv, app
          
        
          
(-> true~~)☠(/~~) -> false # app
(-> true~~)(/~~) -> false  # inv, app
          
        
          
1) kitten → sitten  [s/k]
2) sitten → sittin  [i/e]
3) sittin → sitting [+g]
          
        
          
# S1 length: 21
(-> true) () -> false

# S2 length: 20
(-> true)() -> false
          
        
          
(-> true) () -> false # app
(-> true)() -> false  # inv, app
          
        
          
(-> true~~)☀(/~~) -> false # app
(-> true~~)(/~~) -> false  # inv, app
          
        
          
(-> true)()           # => true
(-> launch(); true)() # => true; !!
          
        
# coffeeScript
(-> true)()
# tokenized
'(', '->', ' ', 'true', ')', '()'
-- abstract form
(Invoke (Lambda BooleanExpr True)) 
~~# coffeeScript/~~
~~(-> true)()/~~
# tokenized
'(', '->', ' ', 'true', ')', '()'
-- abstract form
(Invoke (Lambda BooleanExpr True)) 
# coffeeScript
(-> true)()
~~# tokenized/~~
~~'(', '->', ' ', 'true', ')', '()'/~~
-- abstract form
(Invoke (Lambda BooleanExpr True)) 
		 
Exp    : Value             { $1 }
       | Lambda '()'       { Invoke $1 }
Lambda : '()' _ '->' _ Exp { Lambda $5 }
       | '->' _ Exp        { Lambda $3 }
       | '(' Lambda ')'    { $2 }
# tokenized
'(', '->', ' ', 'true', ')', '()'
		 
Exp    : Value             { $1 }
       | Lambda '()'       { Invoke $1 }
Lambda : '()' _ '->' _ Exp { Lambda $5 }
       | ~~'->' _ Exp        { Lambda $3 }/~~
       | '(' Lambda ')'    { $2 }
# tokenized
'(', ~~'->', ' ', 'true'/~~, ')', '()'
		 
Exp    : Value             { $1 }
       | Lambda '()'       { Invoke $1 }
Lambda : '()' _ '->' _ Exp { Lambda $5 }
       | '->' _ Exp        { Lambda $3 }
       | ~~'(' Lambda ')'    { $2 }/~~
# tokenized
~~'(', '->', ' ', 'true', ')'/~~, '()'
		 
Exp    : Value             { $1 }
       | ~~Lambda '()'       { Invoke $1 }/~~
Lambda : '()' _ '->' _ Exp { Lambda $5 }
       | '->' _ Exp        { Lambda $3 }
       | '(' Lambda ')'    { $2 }
# tokenized
~~'(', '->', ' ', 'true', ')', '()'/~~
# coffeeScript
(-> true)()
# tokenized
'(', '->', ' ', 'true', ')', '()'
~~-- abstract form
(Invoke (Lambda BooleanExpr True))/~~
          
(-> true) () -> false # app
(-> true)() -> false  # inv, app
          
        
          
-- (-> true)☠() -> false
(Apply
  (Lambda (BooleanExpr True))
  (Lambda (BooleanExpr False)))
          
        
          
-- (-> true)() -> false
(Apply
  (Invoke (Lambda (BooleanExpr True)))
  (Lambda (BooleanExpr False)))
          
        
          
(-> true)    # lambda form 1
(() -> true) # lambda form 2
          
        
          
-- (-> true)
-- (() -> true)
Lambda (BooleanExpr True)
          
        
          
(-> true)    # lambda form 1
(() -> true) # lambda form 2
          
        
          
(-> true)    # lambda form 1
(~~()/~~ -> true) # lambda form 2
          
        
          
-- (-> true)☠() -> false
(Apply
  (Lambda (BooleanExpr True))
  (Lambda (BooleanExpr False)))
          
        
          
~~-- (-> true)☠() -> false/~~
(Apply
  ~~(Lambda (BooleanExpr True))/~~
  (Lambda (BooleanExpr False)))
          
        
          
~~-- (-> true)() -> false/~~
(Apply
  ~~(Invoke (Lambda (BooleanExpr True)))/~~
  (Lambda (BooleanExpr False)))
          
        
(-> false)() # invocation
(-> true) true # app
(-> (-> true))() true # both

# t1 t2
(-> false) (-> true)()

# t2 → t2'
true

# t1 t2 → t1 t2'
(-> false) true
		  
		

~~# t1 t2/~~
~~(-> false) (-> true)()/~~

# t2 → t2'
true

# t1 t2 → t1 t2'
(-> false) true
		  
		

# t1 t2
(-> false) (-> true)()

~~# t2 → t2'/~~
~~true/~~

# t1 t2 → t1 t2'
(-> false) true
		  
		

# t1 t2
(-> false) (-> true)()

# t2 → t2'
true

~~# t1 t2 → t1 t2'/~~
~~(-> false) true/~~
		  
		

# t v
(-> (-> false))() true

# t → t'
(-> false)

# t v → t' v
(-> false) true
		  
		

~~# t v/~~
~~(-> (-> false))() true/~~

# t → t'
(-> false)

# t v → t' v
(-> false) true
		  
		

# t v
(-> (-> false))() true

~~# t → t'/~~
~~(-> false)/~~

# t v → t' v
(-> false) true
		  
		

# t v
(-> (-> false))() true

# t → t'
(-> false)

~~# t v → t' v/~~
~~(-> false) true/~~
		  
		
(-> false)() # invocation
(-> (-> true))() true
          
true                 # value
(-> true)            # lambda
(-> true)()          # invoke
(-> true) false      # apply bool
(-> true) -> true    # apply lambda
(-> true) () -> true # apply lambda
          
        
          
~~true                 # value/~~
(-> true)            # lambda
(-> true)()          # invoke
(-> true) false      # apply bool
(-> true) -> true    # apply lambda
(-> true) () -> true # apply lambda
          
        
          
~~true                 # value/~~
~~(-> true)            # lambda/~~
(-> true)()          # invoke
(-> true) false      # apply bool
(-> true) -> true    # apply lambda
(-> true) () -> true # apply lambda
          
        
          
~~true                 # value/~~
~~(-> true)            # lambda/~~
~~(-> true)()          # invoke/~~
(-> true) false      # apply bool
(-> true) -> true    # apply lambda
(-> true) () -> true # apply lambda
          
        
          
~~true                 # value/~~
~~(-> true)            # lambda/~~
~~(-> true)()          # invoke/~~
~~(-> true) false      # apply bool/~~
(-> true) -> true    # apply lambda
(-> true) () -> true # apply lambda
          
        
          
~~true                 # value/~~
~~(-> true)            # lambda/~~
~~(-> true)()          # invoke/~~
~~(-> true) false      # apply bool/~~
~~(-> true) -> true    # apply lambda/~~
(-> true) () -> true # apply lambda
          
        
          
~~true                 # value/~~
~~(-> true)            # lambda/~~
~~(-> true)()          # invoke/~~
~~(-> true) false      # apply bool/~~
~~(-> true) -> true    # apply lambda/~~
~~(-> true) () -> true # apply lambda/~~
          
        
(-> true)() # invoke 
(-> true)() # invoke 
(-> true)() # invoke 
(-> true)() # invoke 
          
(x, y) -> x * y     # mult
(x, y) -> x + y     # add
          
        
          
(x, y) -> x ~~*/~~ y     # mult
(x, y) -> x ~~+/~~ y     # add