[GHC] #7828: RebindableSyntax and Arrow
GHC
ghc-devs at haskell.org
Thu Jun 12 07:55:20 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:
----------------------------------------------+----------------------------
Comment (by jstolarek):
In my work on the prototype I've ran into a problem I can't solve. Since
desugaring of `HsCmdTop`
[https://github.com/ghc/ghc/blob/165ac4af4a1002eff5f5a474bc21bc443c8f8c63/compiler/deSugar/DsArrows.lhs#L292
requires calls to arr and >>>] I've added two `SyntaxExpr` to `HsCmdTop`
datatype. These two `SyntaxExpr`s
[https://github.com/ghc/ghc/blob/165ac4af4a1002eff5f5a474bc21bc443c8f8c63/compiler/typecheck/TcArrows.lhs#L128
need to be typechecked in tcCmdTop]. I've see earlier how
[https://github.com/ghc/ghc/blob/165ac4af4a1002eff5f5a474bc21bc443c8f8c63/compiler/typecheck/TcMatches.lhs#L761
typechecking of the do-notation bind is implemented] and decided to adopt
a similar aproach:
{{{
tcCmdTop env (L loc (HsCmdTop cmd _ _ names compose_op arr_op))
cmd_ty@(cmd_stk, res_ty)
= setSrcSpan loc $
do { cmd' <- tcCmd env cmd cmd_ty
; names' <- mapM (tcSyntaxName ProcOrigin (cmd_arr env)) names
-- VOODOO CODING based on typechecking of >>= in TcMatches
-- is it correct to use b and c variables for typechecking in both
-- arr and compose?
; a <- newFlexiTyVarTy liftedTypeKind
; b <- newFlexiTyVarTy liftedTypeKind
; c <- newFlexiTyVarTy liftedTypeKind
; arr_op' <- tcSyntaxOp DoOrigin arr_op
(mkFunTy (mkFunTy b c) (mkCmdArrTy env b
c))
; compose_op' <- tcSyntaxOp DoOrigin compose_op
(mkFunTys [mkCmdArrTy env a b, mkCmdArrTy
env b c] (mkCmdArrTy env a c))
; return (L loc $ HsCmdTop cmd' cmd_stk res_ty names' compose_op'
arr_op') }
}}}
This however ends with a panic. Using `-dcore-lint` gives me this:
{{{
*** Core Lint errors : in result of Desugar (after optimization) ***
<no location info>: Warning:
In the expression: T7828.>>>
@ GHC.Prim.Any
@ GHC.Prim.Any
@ GHC.Prim.Any
@ a_aEo
@ (a_aEo, ())
@ a_aEo
(T7828.arr
@ GHC.Prim.Any
@ GHC.Prim.Any
@ a_aEo
@ (a_aEo, ())
(\ (n_aus :: a_aEo) -> (n_aus, GHC.Tuple.())))
(T7828.>>>
@ (a_aEo, ())
@ a_aEo
@ a_aEo
(T7828.arr
@ (a_aEo, ())
@ a_aEo
(\ (ds_dGU :: (a_aEo, ())) ->
case ds_dGU of _ [Occ=Dead] { (ds_dGT, _
[Occ=Dead]) -> ds_dGT }))
(T7828.returnA @ a_aEo))
Illegal type application:
Exp type:
T7828.R GHC.Prim.Any GHC.Prim.Any
-> T7828.R GHC.Prim.Any GHC.Prim.Any
-> T7828.R GHC.Prim.Any GHC.Prim.Any :: *
Arg type: a_aEo :: *
}}}
These `GHC.Prim.Any` look wrong. Notice that there are two calls of `>>>`
and `arr` but only one of each has these extra `GHC.Prim.Any` parameters.
The incorrect `>>>` and `arr` are generated by my modified `HsCmdTop`. The
other pair of `>>>` and `arr` is generated by `HsCmdArrApp` constructor,
which has not been modified yet. Simon, help?
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/7828#comment:24>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list