
#7828: RebindableSyntax and Arrow ----------------------------------------------+---------------------------- Reporter: AlessandroVermeulen | Owner: Type: bug | jstolarek Priority: normal | Status: new Component: Compiler (Type checker) | Milestone: 7.10.1 Resolution: | Version: 7.6.2 Operating System: Unknown/Multiple | Keywords: Type of failure: GHC rejects valid program | Architecture: Test Case: | Unknown/Multiple Blocking: | Difficulty: Unknown | Blocked By: | Related Tickets: #1537, | #3613 ----------------------------------------------+---------------------------- Comment (by simonpj): The VOODOO CODING is of course wrong. Take a look at the version for `BindStmt` in (for example) `tcMcStmt`, in `TcMatches` line 511. We are typechecking `pat <- rhs; body` as if it was `(>>=) rhs (\x -> body)`. So we instantiate `(>>=)`, expecting its type to have the shape {{{ rhs_ty -> (pat_ty -> body_ty) }}} That's what `tcSyntaxOp` does. Then we check that `pat` really does have type `pat_ty` and `rhs` really does have type `rhs_ty`. Presumably you need to do similar things for arrows, but I'm not deep enough into it to know how. Doing the instantiation once, at `CmdTop` will almost certainly not work. I'm sorry not to be more helpful. Why not follow Ross's suggestions in comment 17? -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/7828#comment:26 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler