[GHC] #11982: Typechecking fails for parallel monad comprehensions with polymorphic let (GHC 7.10.3 through 8.6.3)

GHC ghc-devs at haskell.org
Wed Jan 23 16:27:03 UTC 2019


#11982: Typechecking fails for parallel monad comprehensions with polymorphic let
(GHC 7.10.3 through 8.6.3)
-------------------------------------+-------------------------------------
        Reporter:  simonpj           |                Owner:  josefs
            Type:  bug               |               Status:  new
        Priority:  normal            |            Milestone:
       Component:  Compiler          |              Version:  7.10.3
      Resolution:                    |             Keywords:  ApplicativeDo
Operating System:  Unknown/Multiple  |         Architecture:
 Type of failure:  GHC rejects       |  Unknown/Multiple
  valid program                      |            Test Case:
      Blocked By:                    |             Blocking:
 Related Tickets:                    |  Differential Rev(s):
       Wiki Page:                    |
-------------------------------------+-------------------------------------

Comment (by vdukhovni):

 I don't know whether the below observation is at all useful, but it seems
 that while let-bound polymorphism is restricted by ApplicativeDo, the same
 does not appear to be the case with "where".  Thus changing the code as
 follows:

 {{{
  main = do
      line <- getLine
      lock <- newMVar ()
 -    let locker :: Locker
 +    go line lock
 +  where
 +    go line lock =
 +        f line locker
 +      where
 +        locker :: Locker
          locker = withMVar lock . const
 -    f line locker
 }}}
 makes the module compile.  I don't know whether it is possible to perform
 that kind of transformation automatically.

-- 
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/11982#comment:10>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list