title: Are there a thing call "semi-monad" or "counter-monad"?
body: <p>Well, I am studying Haskell Monads. When I read the Wikibook <a href="http://en.wikibooks.org/wiki/Haskell/Category_theory">Category theory</a> article, I found that the signature of monad morphisms looks pretty like tautologies in logic, but you need to convert <code>M a</code> to <code>~~A</code>, here <code>~</code> is the logic negation.</p>
  
  <pre><code>return :: a -&gt; M a -- Map to tautology A =&gt; ~~A, double negation introduction
  (&gt;&gt;=) :: M a -&gt; (a -&gt; M b) -&gt; M b -- Map to tautology ~~A =&gt; (A =&gt; ~~B) =&gt; ~~B
  </code></pre>
  
  <p>the other operations is also tautologies:</p>
  
  <pre><code>fmap :: (a -&gt; b) -&gt; M a -&gt; M b -- Map to (A =&gt; B) -&gt; (~~A =&gt; ~~B)
  join :: M (M a) -&gt; M a -- Map to ~~(~~A) =&gt; ~~A
  </code></pre>
  
  <p>It's also understood that according to the fact that the <a href="http://en.wikibooks.org/wiki/Haskell/The_Curry-Howard_isomorphism">Curry-Howard</a> correspondence of normal functional languages is the intuitive logic, not classical logic, so we cannot expect a tautology like <code>~~A =&gt; A</code> can have a correspondence.</p>
  
  <p>But I am thinking of something else. Why the Monad can only relate to a double negation? what is the correspondence of single negation? This lead me to the following class definition:</p>
  
  <pre><code>class Nomad n where
      rfmap :: (a -&gt; b) -&gt; n b -&gt; n a
      dneg :: a -&gt; n (n a)
  
  return :: Nomad n =&gt; a -&gt; n (n a)
  return = dneg
  (&gt;&gt;=) :: Nomad n =&gt; n (n a) -&gt; (a -&gt; n (n b)) -&gt; n (n b)
  x &gt;&gt;= f = rfmap dneg $ rfmap (rfmap f) x
  </code></pre>
  
  <p>Here I defined a concept called "Nomad", and it supports two operations (both related to a logic axiom in intuitive logic). Notice the name "rfmap" means the fact that its signature is similar to functor's <code>fmap</code>, but the order of <code>a</code> and <code>b</code> are reversed in result. Now I can re-define the Monad operations with them, with replace <code>M a</code> to <code>n (n a)</code>.</p>
  
  <p>So now let's go to the question part. The fact that Monad is a concept from category theory seems to mean that my "Nomad" is also a category theory concept. So what is it? Is it useful? Are there any papers or research results exists in this topic?</p>