[commit: ghc] wip/T14068: Avoid name capture in setJoinResTy (6a50466)

Simon Peyton Jones simonpj at microsoft.com
Wed Aug 2 08:21:10 UTC 2017


Joachim

Aha!  I think my comment on Phab is redundant.  You are simply avoiding name capture, which is obviously right; you are not restricting the applicability of the transformation.

Needless to say, a Note would help in due course.

S

|  -----Original Message-----
|  From: ghc-commits [mailto:ghc-commits-bounces at haskell.org] On Behalf
|  Of git at git.haskell.org
|  Sent: 02 August 2017 04:07
|  To: ghc-commits at haskell.org
|  Subject: [commit: ghc] wip/T14068: Avoid name capture in setJoinResTy
|  (6a50466)
|  
|  Repository : ssh://git@git.haskell.org/ghc
|  
|  On branch  : wip/T14068
|  Link       :
|  https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fghc.ha
|  skell.org%2Ftrac%2Fghc%2Fchangeset%2F6a5046684f93f1870663119b447fff6ba
|  eb7a7c4%2Fghc&data=04%7C01%7Csimonpj%40microsoft.com%7Cc45ce3f4deea476
|  9222b08d4d953af74%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C6363724
|  00832017356%7CUnknown%7CVW5rbm93bnx7IlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMi
|  IsIkFOIjoiT3RoZXIifQ%3D%3D%7C-
|  1&sdata=29Iajm6oTE3Zm%2Bdl5ocMav7MPw%2FniO9%2BVeuQm38qWXQ%3D&reserved=
|  0
|  
|  >---------------------------------------------------------------
|  
|  commit 6a5046684f93f1870663119b447fff6baeb7a7c4
|  Author: Joachim Breitner <mail at joachim-breitner.de>
|  Date:   Tue Aug 1 22:48:26 2017 -0400
|  
|      Avoid name capture in setJoinResTy
|  
|  
|  >---------------------------------------------------------------
|  
|  6a5046684f93f1870663119b447fff6baeb7a7c4
|   compiler/types/Type.hs | 22 ++++++++++++++++------
|   1 file changed, 16 insertions(+), 6 deletions(-)
|  
|  diff --git a/compiler/types/Type.hs b/compiler/types/Type.hs index
|  50a35b0..c69d4ff 100644
|  --- a/compiler/types/Type.hs
|  +++ b/compiler/types/Type.hs
|  @@ -2445,11 +2445,21 @@ setJoinResTy :: Int  -- Number of binders to
|  skip
|                -> Type -- New type
|   -- INVARIANT: If any of the first n binders are foralls, those tyvars
|  cannot
|   -- appear in the original result type. See isValidJoinPointType.
|  +--
|  +-- When we set the return type under a forall, avoid capture!
|   setJoinResTy orig_ar new_res_ty orig_ty
|  -  = go orig_ar orig_ty
|  +  = go init_subst orig_ar orig_ty
|     where
|  -    go 0 _  = new_res_ty
|  -    go n ty | Just (arg_bndr, res_ty) <- splitPiTy_maybe ty
|  -            = mkPiTy arg_bndr (go (n-1) res_ty)
|  -            | otherwise
|  -            = pprPanic "setJoinResTy" (ppr orig_ar <+> ppr orig_ty)
|  +    init_subst :: TCvSubst
|  +    init_subst = mkEmptyTCvSubst (mkInScopeSet (tyCoVarsOfType
|  + new_res_ty))
|  +
|  +    go _     0 _  = new_res_ty
|  +    go subst n ty
|  +        | Just (t, ty') <- splitForAllTy_maybe ty
|  +        , let (subst', t') = substTyVarBndr subst t
|  +        = mkForAllTy t' Inferred (go subst' (n-1) ty')
|  +        | Just (arg_ty, ty') <- splitFunTy_maybe ty
|  +        , let arg_ty' = substTy subst arg_ty
|  +        = mkFunTy arg_ty' (go subst (n-1) ty')
|  +        | otherwise
|  +        = pprPanic "setJoinResTy" (ppr orig_ar <+> ppr orig_ty)
|  
|  _______________________________________________
|  ghc-commits mailing list
|  ghc-commits at haskell.org
|  https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fmail.h
|  askell.org%2Fcgi-bin%2Fmailman%2Flistinfo%2Fghc-
|  commits&data=04%7C01%7Csimonpj%40microsoft.com%7Cc45ce3f4deea4769222b0
|  8d4d953af74%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C6363724008320
|  17356%7CUnknown%7CVW5rbm93bnx7IlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFO
|  IjoiT3RoZXIifQ%3D%3D%7C-
|  1&sdata=7%2FAY0EcihvMkjGOHdYdpOog2Roahk0XD%2BunNg54pKFc%3D&reserved=0


More information about the ghc-devs mailing list