Ref: https://github.com/reactjs/rfcs/pull/147#issuecomment-623740218

React version: 0.0.0-experimental-e5d06e34b

## Steps To Reproduce

1. createMutableSource that contains functions
2. getSnapshot returns one of the functions

Link to code example:

https://codesandbox.io/s/jovial-dew-1eg4t?file=/src/App.js

## The current behavior

If getSnapshot returns a function, it will run the function in render. This results in various errors.

My workaround: return an object wrapping a function, and destruct on caller.

> For now, you can work around this by returning a function that returns your function

I don't know how this works as workaround.

## The expected behavior

It would be nice if returning a function just works.

Note: this is not a rare use case in my library https://github.com/dai-shi/use-context-selector
because we often pass `[state, setState]` in a context value.
if (__DEV__) {
    warnAboutMultipleRenderersDEV(source);
  }
  const getVersion = source._getVersion;
  const version = getVersion(source._source);
   Is it safe for this component to read from this source during the current render?
  let isSafeToReadFromSource = false;
   Check the version first.
   If this render has already been started with a specific version,
   we can use it alone to determine if we can safely read from the source.
  const currentRenderVersion = getWorkInProgressVersion(source);
  if (currentRenderVersion !== null) {
    isSafeToReadFromSource = currentRenderVersion === version;
  } else {
    
    const pendingExpirationTime = getLastPendingExpirationTime(root);
    if (pendingExpirationTime === NoWork) {
      isSafeToReadFromSource = true;
    } else {
      
      
      isSafeToReadFromSource = pendingExpirationTime >= renderExpirationTime;
    }
    if (isSafeToReadFromSource) {
      
      
      
      setWorkInProgressVersion(source, version);
    }
  }