docs: function getParamType(tag) {
    var expression = tag.expression,
        result = '',
        type = tag.type;
  
    switch (type) {
      case 'AllLiteral':
        result = '*';
        break;
  
      case 'NameExpression':
        result = _.toString(tag.name);
        break;
  
      case 'RestType':
        result = '...' + result;
        break;
  
      case 'TypeApplication':
        expression = undefined;
        result = _(tag)
          .chain()
          .get('applications')
          .map(_.flow(getParamType, fp.add(fp, '[]')))
          .sort(util.compareNatural)
          .join('|')
          .value();
        break;
  
      case 'UnionType':
        result = _(tag)
          .chain()
          .get('elements')
          .map(getParamType)
          .sort(util.compareNatural)
          .join('|')
          .value();
    }
    if (expression) {
      result += getParamType(expression);
    }
    return type == 'UnionType'
      ? ('(' + result + ')')
      : result;
  }