title: To what extent are Applicative/Monad instances uniquely determined?
body: <p>As described <a href="https://stackoverflow.com/q/19774904/1333025">this question/answers</a>, <code>Functor</code> instances are uniquely determined, if they exists.</p>
  
  <p>For lists, there are two well know Applicative instances: <code>[]</code> and <a href="https://hackage.haskell.org/package/base-4.8.1.0/docs/Control-Applicative.html#v:ZipList" rel="noreferrer"><code>ZipList</code></a>. So <strong>Applicative isn't unique</strong> (see also <a href="https://stackoverflow.com/q/32929252/1333025">Can GHC derive Functor and Applicative instances for a monad transformer?</a> and <a href="https://stackoverflow.com/q/18861231/1333025">Why is there no <code>-XDeriveApplicative</code> extension?</a>). However, <code>ZipList</code> needs infinite lists, as its <a href="https://hackage.haskell.org/package/base-4.8.1.0/docs/Control-Applicative.html#v:pure" rel="noreferrer"><code>pure</code></a> repeats a given element indefinitely.</p>
  
  <ul>
  <li>Are there other, perhaps better examples of data structures that have at least two <code>Applicative</code> instances?</li>
  <li>Are there any such examples that only involve finite data structures? That is, like if hypothetically Haskell's type system distinguished inductive and <a href="https://en.wikipedia.org/wiki/Coinduction" rel="noreferrer">coinductive</a> data types, would it be possible to uniquely determine Applicative?</li>
  </ul>
  
  <p>Going further, if we could extend both <code>[]</code> and <code>ZipList</code> to a Monad, we'd have an example where a monad isn't uniquely determined by the data type and its Functor. Alas, <code>ZipList</code> has a Monad instance <a href="https://mail.haskell.org/pipermail/haskell-cafe/2009-April/059087.html" rel="noreferrer">only if we restrict ourselves to infinite lists</a> (<a href="https://hackage.haskell.org/package/Stream-0.4.7.2/docs/Data-Stream.html" rel="noreferrer">streams</a>).
  And <code>return</code> for <code>[]</code> creates a single-element list, so it requires finite lists. Therefore:</p>
  
  <ul>
  <li>Are Monad instances uniquely determined by the data type? Or is there an example of a data type that can have two distinct Monad instances?</li>
  </ul>
  
  <p>In the case there is an example with two or more distinct instances, an obvious question arises, if they must/can have the same Applicative instance:</p>
  
  <ul>
  <li>Are Monad instances uniquely determined by the Applicative instance, or is there an example of an Applicative that can have two distinct Monad instances?</li>
  <li>Is there an example of a data type with two distinct Monad instances, each having a different Applicative super-instance?</li>
  </ul>
  
  <p>And finally we can ask the same question for Alternative/MonadPlus. This is complicated by the fact that there are two distinct set of <a href="https://wiki.haskell.org/MonadPlus" rel="noreferrer">MonadPlus laws</a>. Assuming we accept one of the set of laws (and for Applicative we accept <a href="https://stackoverflow.com/a/28714160/1333025">right/left distributivity/absorption</a>, see also <a href="https://stackoverflow.com/q/13080606/1333025">this question</a>),</p>
  
  <ul>
  <li>is Alternative uniquely determined by Applicative, and MonadPlus by Monad, or are there any counter-examples?</li>
  </ul>
  
  <p>If any of the above are unique, I'd be interested in knowing why, to have a hint of a proof. If not, an counter-example.</p>