
  function(value)
    set(value ${ARGN})

    if("${value}_" STREQUAL "_")
      return()
    endif()

    set(callable)
    set(is_callable false)


    is_lambda("${ARGV0}")
    ans(is_lambda)

    if(COMMAND "${ARGV0}")
      list(REMOVE_AT value 0)
      callable("${ARGV0}")
      ans(callable)
      set(is_callable true)
    elseif(is_lambda)
      list(REMOVE_AT value 0)
      callable("${ARGV0}")
      ans(callable)
      set(is_callable true)
    else()
      is_callable("${ARGV0}")
      ans(is_callable)
      if(is_callable)
        set(callable "${ARGV0}")
      endif()
    endif()
    if(is_callable)
      call2("${callable}" ${value})
      return_ans()
    endif()

    data(${value})
    return_ans()
  endfunction()
