title: How to compose "Maybe" lenses?
body: <p>If I have lenses for a nested record, where each lens returns a <code>Maybe</code>, how can I get them to compose, so that if anything in the "traversal" returns a <code>Nothing</code> the final result is a <code>Nothing</code>?</p>
  
  <pre><code>data Client = Client
    {
      clientProperties :: Maybe Properties
    , ...
    }
  
  data Properties = Properties
    {
      propSmtpConfig :: Maybe SmtpConfig
    , ...
    }
  
  c :: Client 
  c = undefined
  
  smtp = c ^. (properties . smtpConfig) -- How to make these lenses compose?
  </code></pre>
  
  <p><strong>Edit</strong> I tried a lot of options, but this is the best I could come up with. Looking for something cleaner:</p>
  
  <pre><code>(client ^. properties) &gt;&gt;= (view smtpConfig)
  </code></pre>