public static function create($value, $empty = null)
    {
        // Option is a callable class!
        $value = ( ! $value instanceof self) && is_callable($value) ? $value() : $value;

        if (is_callable($empty)) {
            $option = $empty($value) ? self::$none : new Some($value);
        } else if ($value === $empty) {
            $option = self::$none;
        } else if ($value instanceof self) {
            $option = $value;
        } else {
            $option = new Some($value);
        }

        return $option;
    }