anchor.diff:     */
     Sqrt(arg): super.sqrt(arg);
   
  -  String toString() => 'sqrt(${arg.toString()})';
  -  
     /**
      * Possible simplifications:
      * 
      * 1. sqrt(x^2) = x
  +   * 2. sqrt(0) = 0
  +   * 3. sqrt(1) = 1
      * 
      * Note: This simplification works _only_ for real numbers and 
      * _not_ for complex numbers.
  
positive.code:     /*
      bool baseNegative = false, expNegative = false;
      
      
      // unbox unary minuses
      if (baseOp is UnaryMinus) {
        baseOp = baseOp.exp;
  
negative.code:   
    Expression derive(String toVar) => arg.derive(toVar) / arg;
    
    /**
     * Possible simplifications:
     * 
     * 1. ln(1) = 0
     */
    Expression simplify() {
      Expression argSimpl = arg.simplify();
      
      if (_isNumber(argSimpl, 1)) {
        return new Number(0); // ln(1) = 0
      }
      
      return new Ln(argSimpl);
    }
    
    String toString() => 'ln(${arg.toString()})';
  }
  
  /**
   * The n-th root function. n needs to be a natural number.
   */
  class Root extends DefaultFunction {
    
    /// N-th root.
    int n;
  