<p>The following type:</p>

<pre><code>newtype H a b = Fn {invoke :: H b a -&gt; b}
</code></pre>

<p>while not exactly the same as yours but is in a similar spirit, have been shown by Launchbury, Krstic, and Sauerwein to have interesting uses regarding corouitining: <a href="https://arxiv.org/pdf/1309.5135.pdf" rel="nofollow noreferrer">https://arxiv.org/pdf/1309.5135.pdf</a> </p>
Is an infinitely recursive type useful?
<p>Lately I've been experimenting with the general question, <em>what will GHC allow me to do?</em> I was surprised to find, that it considers the following program as valid</p>

<pre><code>module BrokenRecursiveType where

data FooType = Foo FooType

main = print "it compiles!"
</code></pre>

<p>At first I thought, <em>how is this useful?</em> Then I remembered that Haskell is lazy, so I could, perhaps, define a function like the following to use it</p>

<pre><code>allTheFoos = Foo allTheFoos
</code></pre>

<p>Then I thought, <em>so how is this useful?</em></p>

<p>Are there any valuable use cases (thought up or actually experienced) for types of similar form to <code>FooType</code>?</p>