title: Is this property of a functor stronger than a monad?
body: <p>While thinking about how to generalize monads, I came up with the following property of a functor F:</p>
  
  <pre><code>inject :: (a -&gt; F b) -&gt; F(a -&gt; b) 
  </code></pre>
  
  <p>-- which should be a natural transformation in both a and b.</p>
  
  <p>In absence of a better name, I call the functor F <strong>bindable</strong> if there exists a natural transformation <code>inject</code> shown above.</p>
  
  <p>The main question is, whether this property is already known and has a name, and how is it related to other well-known properties of functors (such as, being applicative, monadic, pointed, traversable, etc.)</p>
  
  <p>The motivation for the name "bindable" comes from the following consideration: Suppose M is a monad and F is a "bindable" functor. Then one has the following natural morphism:</p>
  
  <pre><code>fbind :: M a -&gt; (a -&gt; F(M b)) -&gt; F(M b)
  </code></pre>
  
  <p>This is similar to the monadic "bind",</p>
  
  <pre><code>bind :: M a -&gt; (a -&gt; M b) -&gt; M b
  </code></pre>
  
  <p>except the result is decorated with the functor F.</p>
  
  <p>The idea behind <code>fbind</code> was that a generalized monadic operation can produce not just a single result M b but a "functor-ful" F of such results. I want to express the situation when a monadic operation yields several "strands of computation" rather than just one; each "strand of computation" being again a monadic computation.</p>
  
  <p>Note that every functor F has the morphism</p>
  
  <pre><code>eject :: F(a -&gt; b) -&gt; a -&gt; F b
  </code></pre>
  
  <p>which is converse to "inject". But not every functor F has "inject".</p>
  
  <p>Examples of functors that have "inject": <code>F t = (t,t,t)</code>  or <code>F t = c -&gt; (t,t)</code> where c is a constant type. Functors <code>F t = c</code> (constant functor) or <code>F t = (c,t)</code> are not "bindable" (i.e. do not have "inject"). The continuation functor <code>F t = (t -&gt; r) -&gt; r</code> also does not seem to have <code>inject</code>.</p>
  
  <p>The existence of "inject" can be formulated in a different way. Consider the "reader" functor <code>R t = c -&gt; t</code> where c is a constant type. (This functor is applicative and monadic, but that's beside the point.) The "inject" property then means <code>R (F t) -&gt; F (R t)</code>, in other words, that R commutes with F. Note that this is not the same as the requirement that F be traversable; that would have been <code>F (R t) -&gt; R (F t)</code>, which is always satisfied for any functor F with respect to R.</p>
  
  <p>So far, I was able to show that "inject" implies "fbind" for any monad M.</p>
  
  <p>In addition, I showed that every functor F that has "inject" will also have these additional properties:</p>
  
  <ul>
  <li>it is pointed </li>
  </ul>
  
  <p><code>point ::  t -&gt; F t</code></p>
  
  <ul>
  <li><p>if F is "bindable" and applicative then F is also a monad</p></li>
  <li><p>if F and G are "bindable" then so is the pair functor F * G  (but not F + G)</p></li>
  <li><p>if F is "bindable" and A is any profunctor then the (pro)functor <code>G t = A t -&gt; F t</code> is bindable</p></li>
  <li><p>the identity functor is bindable.</p></li>
  </ul>
  
  <p>Open questions:</p>
  
  <ul>
  <li><p>is the property of being "bindable" equivalent to some other well-known properties, or is it a new property of a functor that is not usually considered?</p></li>
  <li><p>are there any other properties of the functor "F" that follow from the existence of "inject"?</p></li>
  <li><p>do we need any laws for "inject", would that be useful? For instance, we could require that R (F t) be isomorphic to F (R t) in one or both directions.</p></li>
  </ul>