function Unary( fcn, idtypes, odtypes, policy ) {
	if ( !( this instanceof Unary ) ) {
		return new Unary( fcn, idtypes, odtypes, policy );
	}
	if ( !isFunction( fcn ) ) {
		throw new TypeError( format( 'invalid argument. First argument must be a function. Value: `%s`.', fcn ) );
	}
	if (
		!isCollection( idtypes ) ||
		idtypes.length < 1 ||
		!everyBy( idtypes, isDataType )
	) {
		throw new TypeError( format( 'invalid argument. Second argument must be an array of data types. Value: `%s`.', idtypes ) );
	}
	if (
		!isCollection( odtypes ) ||
		odtypes.length < 1 ||
		!everyBy( odtypes, isDataType )
	) {
		throw new TypeError( format( 'invalid argument. Third argument must be an array of data types. Value: `%s`.', odtypes ) );
	}
	if ( !isOutputDataTypePolicy( policy ) ) {
		throw new TypeError( format( 'invalid argument. Fourth argument must be a supported output data type policy. Value: `%s`.', policy ) );
	}
	this._fcn = fcn;
	this._idtypes = idtypes;
	this._odtypes = odtypes;
	this._policy = policy;
	return this;
}
Constructor for applying a unary function to each element in an input array.

@constructor
@param {Function} fcn - unary function to apply
@param {StringArray} idtypes - list of supported input data types
@param {StringArray} odtypes - list of supported output data types
@param {string} policy - output data type policy
@throws {TypeError} first argument must be a function
@throws {TypeError} second argument must be an array of supported data types
@throws {TypeError} third argument must be an array of supported data types
@throws {TypeError} fourth argument must be a supported output data type policy
@returns {Unary} instance

@example
var base = require( '@stdlib/math/base/special/abs' );
var dtypes = require( '@stdlib/array/dtypes' );

var idt = dtypes( 'real_and_generic' );
var odt = idt;
var policy = 'same';

var abs = new Unary( base, idt, odt, policy );

var x = [ -1.0, -2.0, -3.0 ];

var y = abs.apply( x );
// returns [ 1.0, 2.0, 3.0 ]