title: Re-exporting an implementation without exporting the definition
body: <p>Suppose I have module <code>M1</code> that defines a type in terms of another, existing type:</p>
  <pre><code>module M1 
  
  import public Control.Monad.Identity
  
  public export M : Type -&gt; Type
  M = Identity
  </code></pre>
  <p>I can of course import <code>M1</code> and use <code>M</code> anywhere expecting an <code>Applicative</code>:</p>
  <pre><code>module M2
  
  import M1
  
  bar : M ()
  bar = pure ()
  </code></pre>
  <p>But what if I don't want to export <code>M</code>'s definition? In other words, I'd like to write</p>
  <pre><code>export M :: Type -&gt; Type
  M = Identity
  </code></pre>
  <p>so that client code can't depend on <code>M</code>'s definition, but I would still like client code to be able to access <code>Applicative M</code>.</p>