/**
* map :: Functor f => (a -> b) -> f a -> f b
*
* @return mixed|\Closure
*
* @param callable $transformation
* @param Functor $value
*/
function map(callable $transformation = null, Functor $value = null)
{
return call_user_func_array(curryN(2, function (callable $transformation, Functor $value) {
return $value->map($transformation);
}), func_get_args());
}