Forall'd variable ‘$rcobox’ is not bound in RULE lhs
I tried to add this rule to the code of Data.Map
:
{-# RULES
"mapKeysMonotonic/coerce" mapKeysMonotonic coerce = coerce
#-}
but it would not go through:
libraries/containers/Data/Map/Base.hs:1800:1: warning:
Forall'd variable ‘$rcobox’ is not bound in RULE lhs
Orig bndrs: [k2, a, $rcobox]
Orig lhs: let {
cobox_ab8H :: Coercible k2 k2
[LclId, Str=DmdType]
cobox_ab8H =
MkCoercible @ * @ k2 @ k2 @~ (<k2>_R :: k2 ~R# k2) } in
mapKeysMonotonic @ k2 @ k2 @ a (coerce @ k2 @ k2 cobox_ab8H)
optimised lhs: mapKeysMonotonic
@ k2
@ k2
@ a
(\ (tpl_B2 :: k2) ->
case cobox_ab8H of _ [Occ=Dead] { MkCoercible tpl_B3 -> tpl_B2 })
The same syntax works for mapping the second parameter, i.e.
{-# RULES
"map/coerce" map coerce = coerce
#-}
(this still Data.Map
’s map
).
This blocks https://github.com/haskell/containers/pull/163
I’ll see if I can produce a stand-alone testcase.
Trac metadata
Trac field | Value |
---|---|
Version | 7.11 |
Type | Bug |
TypeOfFailure | OtherFailure |
Priority | normal |
Resolution | Unresolved |
Component | Compiler |
Test case | |
Differential revisions | |
BlockedBy | |
Related | |
Blocking | |
CC | |
Operating system | |
Architecture |