function Random( prng, dtypes, dtype ) {
	if ( !( this instanceof Random ) ) {
		return new Random( prng, dtypes, dtype );
	}
	if ( !isFunction( prng ) ) {
		throw new TypeError( format( 'invalid argument. First argument must be a function. Value: `%s`.', prng ) );
	}
	// TODO: tighten this up by actually validating that `dtypes` contains only recognized/supported dtype strings
	if ( !isStringArray( dtypes ) ) {
		throw new TypeError( format( 'invalid argument. Second argument must be an array of strings. Value: `%s`.', dtypes ) );
	}
	// Require that the default output array data type be a member of the list of supported output array data types...
	if ( !contains( dtypes, dtype ) ) {
		throw new TypeError( format( 'invalid argument. Third argument must be a supported data type. Value: `%s`.', dtype ) );
	}
	this._prng = prng;
	this._dtypes = dtypes;
	this._dtype = dtype;
	return this;
}
Constructor for creating arrays filled with pseudorandom values drawn from a binary PRNG.

@constructor
@param {Function} prng - binary pseudorandom value generator
@param {StringArray} dtypes - list of supported output data types
@param {string} dtype - default output data type
@throws {TypeError} first argument must be a function
@throws {TypeError} second argument must be an array of strings
@throws {TypeError} third argument must be a supported data type
@returns {Random} instance

@example
var arcsine = require( '@stdlib/random/base/arcsine' );

var dtypes = [ 'float64', 'float32', 'generic' ];
var defaultDType = 'float64';

var rand = new Random( arcsine, dtypes, defaultDType );

var v = rand.generate( 10, 2.0, 5.0 );
// returns <Float64Array>