[GHC] #7828: RebindableSyntax and Arrow
GHC
ghc-devs at haskell.org
Mon Jun 16 19:22:18 UTC 2014
#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 jstolarek):
> Why not follow Ross's suggestions in comment 17?
If I understand correctly Ross' proposal is actually independent of this
ticket: we could implement it and still have broken RebindableSyntax.
That's why I chose to fix the rebindable syntax first. Perhaps then we can
think about alternative desugaring of arrow syntax.
> The VOODOO CODING is of course wrong.
Well, it is wrong, but I don't yet see why it is wrong. In my code I
intended to check that `arr` has type `b -> c -> x b c` (where `x` is an
arrow):
{{{
arr_op' <- tcSyntaxOp DoOrigin arr_op
(mkFunTy (mkFunTy b c) (mkCmdArrTy env b c))
}}}
and that `>>>` has type `x a b -> x b c -> x a c`:
{{{
compose_op' <- tcSyntaxOp DoOrigin compose_op
(mkFunTys [mkCmdArrTy env a b, mkCmdArrTy env b c]
(mkCmdArrTy env a c))
}}}
I looked at the code you pointed me to and I don't yet see where I went
wrong. Do you mean that I should not only check `arr` and `>>>`
independently of everything else, but should also check that the type of
the whole desugared expression - ie. `arr (\p -> ((xs),())) >>> c'` - is
also correct?
> Doing the instantiation once, at CmdTop will almost certainly not work.
Not sure if I understand what instantiation you mean. You refer to `arr`
and `compose`? They are instantiated separately for each data constructor
that needs them. `HsCmdTop` was just an example.
At the moment I implemented your proposal: every constructor stores
operators required for its desugaring and the `CmdSyntaxTable` has been
removed. Typechecking is the missing part. I'll be taking a stab at it
sometime later this week. There are some examples of typechecking arrows
in `TcArrows`, which will hopefully get me on the right track. Once this
is done I expect to get tons of minor bugs resulting from my voodoo
programming. Hopefully, these will be easy to fix.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/7828#comment:27>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list