anchor.diff:  	   unless (chain s (has elem))
   	   do (chain lst (push elem)))
   	lst))
  +
  +    (defun lines (string) (chain string (split #\newline)))
   
       (defun join (strings &optional (separator "")) (chain strings (join separator)))
   
  
positive.code: 		  (chain -code-mirror commands 
  			 (autocomplete mirror (@ -code-mirror hint ajax) (create :async t))))))
  
         (setf (@ -code-mirror commands show-arg-hint)
  	     (debounce
  	      (lambda (mirror)
  		($aif (by-selector-all ".notebook-arg-hint")
  		      (map (lambda (elem) (chain elem (remove))) it))
  		(labels ((find-first (ctx) 
  			   (cond ((null ctx) nil)
  				 ((or (= "arglist" (@ ctx node_type))
  				      (and (@ ctx prev)
  					   (@ ctx prev node_type)
  					   (= "arglist" (@ ctx prev node_type)))) nil)
  				 ((= "(" (@ ctx opening)) (@ ctx first))
  				 (t (find-first (@ ctx prev))))))
  		  (let* ((coords (chain mirror (cursor-coords)))
  			 (cur (chain mirror (get-cursor)))
  			 (tok (chain mirror (get-token-at cur))))
  		    ($aif (and tok (find-first (@ tok state ctx)))
  			  (progn (console.log tok)
  				 (arg-hint it (+ 1 (@ coords right)) (@ coords bottom)))))))
  	      100))
         ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
         (notebook-events)
         (hide! (by-selector ".footer"))
  
negative.code: 					     (let ((contents (cell-editor-contents cell-id)))
  					       (notebook/eval-to-cell cell-id contents)))
  					   "Ctrl-Space" 'autocomplete
  					   "Ctrl-Right" (lambda (cmd) (forward-sexp (cell-mirror cell-id)))
  					   "Tab" 'indent-auto))))
  	(setf 
  	 mirror (chain -code-mirror (from-text-area (by-cell-id cell-id ".cell-contents") options))
  