
#11835: ApplicativeDo failed to desugar last line with pure $ <expr> -------------------------------------+------------------------------------- Reporter: Cosmia | Owner: simonmar Type: bug | Status: merge Priority: normal | Milestone: 8.0.2 Component: Compiler | Version: 8.0.1-rc2 Resolution: | Keywords: ApplicativeDo Operating System: MacOS X | Architecture: Type of failure: GHC rejects | Unknown/Multiple valid program | Test Case: Blocked By: | Blocking: Related Tickets: #11607 | Differential Rev(s): Phab:D2345 Wiki Page: | -------------------------------------+------------------------------------- Comment (by EyalLotem): Could be interesting to detect pure/return via their type though, rather than name. If you have a function of type: (a -> m a) with up to Monad constraints on the m, then you can consider it a "return". For example, here: ($) return :: Monad m => a -> m a No special casing needed, it's the type of return so it must *be* return. This would currently break down due to fail: const (fail "boo!") :: Monad m => a -> m a But that will be fixed once fail is taken the hell out of Monad. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/11835#comment:12 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler