title: It's not a monad, but what is it?
body: <p><a href="http://en.wikibooks.org/wiki/Haskell/Category_theory#Monads">According to the Haskell wikibook</a>, a <code>Monad</code> called <code>m</code> is a <code>Functor</code> with two additional operations:</p>
  
  <pre><code>unit :: a -&gt; m a
  join :: m (m a) -&gt; m a
  </code></pre>
  
  <p>That's nice, but I have something slightly different.  Glossing over the gory details, I have a type that has good <code>unit</code> and <code>join</code> functions, but its <code>fmap</code> is not well behaved (<code>fmap g . fmap f</code> is not necessarily <code>fmap (g.f)</code>).  Because of this, it cannot be made an instance of <code>Monad</code>.  Nonetheless, I'd like to give it as much generic functionality as possible.</p>
  
  <p>So my question is, what category theoretic structures are similar to monads in that they have a <code>unit</code> and <code>join</code>?</p>
  
  <p>I realize that on some level, the above question is ill-defined.  For monads the <code>unit</code> and <code>join</code> definitions only make sense in terms of the <code>fmap</code> definition.  Without <code>fmap</code>, you can't define any of the monad laws, so any definitions of <code>unit</code>/<code>join</code> would be equally "valid."  So I'm looking for functions other than <code>fmap</code> that it might make sense to define some "not-monad" laws on these <code>unit</code> and <code>join</code> functions.</p>