anchor.diff:     */
     Literal([var this.value]);
     
  +  /**
  +   * Returns true, if this literal is a constant.
  +   */
  +  bool isConstant() => false;
  +  
  +  /**
  +   * Returns the constant value of this literal.
  +   * Throws StateError if literal is not constant, check before usage with
  +   * isConstant().
  +   */
  +  num getConstantValue() {
  +    throw new StateError('Literal ${this} is not constant.');
  +  }
  +  
     String toString() => value.toString();
   }
   
   /**
  - * A Number is a number literal.
  + * A number is a constant number literal.
    */
   class Number extends Literal {
       
  
positive.code:    */
    Number(num value): super(value);
    
    num evaluate() => value; //TODO rename
    
    Expression derive(String toVar) => new Number(0);
  }
  
  /**
   * A Variable is a named literal.
   */
  class Variable extends Literal {
    String name;
    
    /**
     * Creates a variable literal with given name.
     */
    Variable(String this.name);
    
    void bindTo(Expression binding) {
      this.value = binding;
    }
    
    //TODO how to evaluate?
    //num evaluate() => value == null ? throw new ArgumentError('Variable ${value} is not bound.') : value.evaluate();
    
    Expression derive(String toVar) => name == toVar ? new Number(1) : new Number(0);
    
    String toString() => name;
  }
  
  /**
   * //TODO
   */
  class Interval extends Literal {
    Interval(num min, num max) : super(new Alg.Interval(min, max)); //TODO this does not work
  
negative.code:   String name;
    
    /// List of arguments of this function.
    /// Must be a variable.
    List<Variable> args;
    
    //TODO
    // isComplete() => all bound?
    
    /**
     * Creates a new function with the given name and arguments.
  