On Mon, Dec 21, 2009 at 6:03 AM, Bas van Dijk <span dir="ltr">&lt;<a href="mailto:v.dijk.bas@gmail.com">v.dijk.bas@gmail.com</a>&gt;</span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Hello,<br>
<br>
In my usb-safe[1] library I make extensive use of the ViewPatterns[2]<br>
language extension. However I get strange warnings when using them.<br>
<br>
See for example the following function:<br>
<br>
resetDevice ∷ (pr `ParentOf` cr, MonadIO cr)<br>
            ⇒ RegionalDeviceHandle pr → cr ()<br>
resetDevice (internalHandle → DeviceHandle { internalDevHndl<br>
                                           , configAlreadySetMVar<br>
                                           }) = ...<br>
<br>
where:<br>
<br>
type RegionalDeviceHandle r = RegionalHandle USB.Device r<br>
<br>
internalHandle ∷ RegionalHandle resource r → Handle resource<br>
<br>
and: &#39;Handle&#39; is an associated data type with the following definition:<br>
<br>
data Handle USB.Device = DeviceHandle<br>
    { internalDevHndl ∷ USB.DeviceHandle<br>
    , configAlreadySetMVar ∷ MVar Bool<br>
    }<br>
<br>
Note that I also use the NamedFieldPuns[3] language extension.<br>
<br>
When compiling the module I get lots of warnings like this:<br>
<br>
System/USB/Safe.hs:372:0:<br>
    Warning: Pattern match(es) are overlapped<br>
             In the definition of `resetDevice&#39;:<br>
                 resetDevice ((internalHandle -&gt; (DeviceHandle {internalDevHndl,<br>
<br>
configAlreadySetMVar})))<br>
                             =<br>
                             ...<br>
<br>
System/USB/Safe.hs:372:0:<br>
    Warning: Pattern match(es) are non-exhaustive<br>
             In the definition of `resetDevice&#39;: Patterns not matched:<br>
<br>
I don&#39;t understand which patterns are overlapped or which patterns are<br>
not matched. Is this a GHC bug? Note that I&#39;m using ghc-6.10.4 so it&#39;s<br>
possible that it&#39;s fixed in 6.12.1.<br>
<br>
regards,<br>
<br>
Bas<br>
<br>
[1] usb-safe:<br>
<a href="http://hackage.haskell.org/package/usb-safe-0.4" target="_blank">http://hackage.haskell.org/package/usb-safe-0.4</a><br>
or darcs get <a href="http://code.haskell.org/%7Ebasvandijk/code/usb-safe" target="_blank">http://code.haskell.org/~basvandijk/code/usb-safe</a><br>
<br>
[2] <a href="http://www.haskell.org/ghc/docs/latest/html/users_guide/syntax-extns.html#view-patterns" target="_blank">http://www.haskell.org/ghc/docs/latest/html/users_guide/syntax-extns.html#view-patterns</a><br>
<br>
[3] <a href="http://www.haskell.org/ghc/docs/latest/html/users_guide/syntax-extns.html#record-puns" target="_blank">http://www.haskell.org/ghc/docs/latest/html/users_guide/syntax-extns.html#record-puns</a><br></blockquote>
<div><br>There&#39;s been some improvement at least in 6.12.1, see:<br><br><a href="http://hackage.haskell.org/trac/ghc/ticket/2395">http://hackage.haskell.org/trac/ghc/ticket/2395</a><br><br></div></div>