PL/SQL Functions in the WITH Clause

Oracle 12c allows multiple functions, and multiple sub-queries, in a WITH clause:
COLUMN object_name FORMAT a30;
COLUMN fn_name FORMAT a30;
COLUMN fn_name2 FORMAT a30;

WITH
  FUNCTION fn_with (n VARCHAR2)
  RETURN VARCHAR2
  IS
    lv  all_objects.object_name%TYPE;
  BEGIN
    lv := LOWER(n);
    RETURN lv;
  END fn_with;

  FUNCTION fn_with2 (n VARCHAR2)
  RETURN VARCHAR2
  IS
    lv2  all_objects.object_name%TYPE;
  BEGIN
    lv2 := initcap(n);
    RETURN lv2;
  END fn_with2;

get_names AS (
  SELECT object_name
  FROM   all_objects
  WHERE  rownum <= 10
),

get_data AS (
  SELECT object_name, fn_with(object_name) fn_name, fn_with2(object_name) fn_name2
  FROM   get_names
)

SELECT *
FROM   get_data
/

OBJECT_NAME                    FN_NAME                        FN_NAME2
------------------------------ ------------------------------ ------------------------------
I_OBJ1                         i_obj1                         I_Obj1
CLU$                           clu$                           Clu$
I_COL3                         i_col3                         I_Col3
I_UNDO1                        i_undo1                        I_Undo1
I_CDEF4                        i_cdef4                        I_Cdef4
BOOTSTRAP$                     bootstrap$                     Bootstrap$
FILE$                          file$                          File$
I_CCOL2                        i_ccol2                        I_Ccol2
I_FILE#_BLOCK#                 i_file#_block#                 I_File#_Block#
C_USER#                        c_user#                        C_User#

10 rows selected.
      

but is not so happy with one function calling another
WITH
  FUNCTION fn_with (n VARCHAR2)
  RETURN VARCHAR2
  IS
    lv  all_objects.object_name%TYPE;
  BEGIN
    lv := LOWER(n);
    RETURN lv;
  END fn_with;

  FUNCTION fn_with2 (n VARCHAR2)
  RETURN VARCHAR2
  IS
    lv2  all_objects.object_name%TYPE;
  BEGIN
    IF LENGTH(n) < 6
    THEN
      lv2 := fn_with(n);
    ELSE
      lv2 := initcap(n);
    END IF:
    RETURN lv2;
  END fn_with2;

get_names AS (
  SELECT object_name
  FROM   all_objects
  WHERE  rownum <= 10
),

get_data AS (
  SELECT object_name, fn_with(object_name) fn_name, fn_with2(object_name) fn_name2
  FROM   get_names
)

SELECT *
FROM   get_data
/

SP2-0552: Bind variable "RETURN" not declared.