Implement mutually recursive view patterns
I got bit by the fact that mutually recursive view patterns don't work when writing code a bit like this:
```
{-# LANGUAGE ViewPatterns #-}
module RecursiveViewPatterns where
-- Doesn't work: "Not in scope: 'foo'"
(foo, unzip -> (bars, bazs)) = undefined
(spqr, ($ foo) -> metavariable) = undefined
-- Works fine:
-- (foo, unzip -> (bars, bazs)) = undefined
-- (spqr, mk_metavariable) = undefined
-- metavariable = mk_metavariable foo
```
(I've started using view patterns very aggressively to eliminate almost every linearly-used binding in my programs!)
I note that the GHC users guide (http://www.haskell.org/ghc/docs/6.12.1/html/users_guide/syntax-extns.html) mentions that this feature is not yet implemented, but the restriction may be lifted in future. Consider this ticket a vote for that change.
<details><summary>Trac metadata</summary>
| Trac field | Value |
| ---------------------- | -------------- |
| Version | 6.13 |
| Type | FeatureRequest |
| TypeOfFailure | OtherFailure |
| Priority | normal |
| Resolution | Unresolved |
| Component | Compiler |
| Test case | |
| Differential revisions | |
| BlockedBy | |
| Related | |
| Blocking | |
| CC | |
| Operating system | |
| Architecture | |
</details>
<!-- {"blocked_by":[],"summary":"Implement mutually recursive view patterns","status":"New","operating_system":"","component":"Compiler","related":[],"milestone":"","resolution":"Unresolved","owner":{"tag":"Unowned"},"version":"6.13","keywords":[],"differentials":[],"test_case":"","architecture":"","cc":[""],"type":"FeatureRequest","description":"I got bit by the fact that mutually recursive view patterns don't work when writing code a bit like this:\r\n\r\n{{{\r\n{-# LANGUAGE ViewPatterns #-}\r\nmodule RecursiveViewPatterns where\r\n\r\n-- Doesn't work: \"Not in scope: 'foo'\"\r\n(foo, unzip -> (bars, bazs)) = undefined\r\n(spqr, ($ foo) -> metavariable) = undefined\r\n\r\n-- Works fine:\r\n-- (foo, unzip -> (bars, bazs)) = undefined\r\n-- (spqr, mk_metavariable) = undefined\r\n-- metavariable = mk_metavariable foo\r\n}}}\r\n\r\n(I've started using view patterns very aggressively to eliminate almost every linearly-used binding in my programs!)\r\n\r\nI note that the GHC users guide (http://www.haskell.org/ghc/docs/6.12.1/html/users_guide/syntax-extns.html) mentions that this feature is not yet implemented, but the restriction may be lifted in future. Consider this ticket a vote for that change.","type_of_failure":"OtherFailure","blocking":[]} -->
issue