interpolate(node) {
    var self = this
      , isSelector = ('selector' == node.nodeName);
    function toString(node) {
      switch (node.nodeName) {
        case 'function':
        case 'ident':
          return node.name;
        case 'literal':
        case 'string':
          if (self.prefix && !node.prefixed && !node.val.nodeName) {
            node.val = node.val.replace(/\.(?=[\w-])|^\.$/g, '.' + self.prefix);
            node.prefixed = true;
          }
          return node.val;
        case 'unit':
          // Interpolation inside keyframes
          return '%' == node.type ? node.val + '%' : node.val;
        case 'member':
          return toString(self.visit(node));
        case 'expression':
          // Prevent cyclic `selector()` calls.
          if (self.calling && ~self.calling.indexOf('selector') && self._selector) return self._selector;
          self.return++;
          var ret = toString(self.visit(node).first);
          self.return--;
          if (isSelector) self._selector = ret;
          return ret;
      }
    }

    if (node.segments) {
      return node.segments.map(toString).join('');
    } else {
      return toString(node);
    }
  }
Map segments in `node` returning a string.

@param {Node} node
@return {String}
@api private