visib isible dep e depen ende dent nt quan uantifjcati
play

Visib isible Dep e Depen ende dent nt Quan uantifjcati - PowerPoint PPT Presentation

Visib isible Dep e Depen ende dent nt Quan uantifjcati tifjcation on (V (VDQ) Q) Ryan Scott PL Wonks March 8, 2019 Code t Code time! me! The VDQ p he VDQ pat atch ch --- a/compiler/parser/Parser.y +++


  1. Visib isible Dep e Depen ende dent nt Quan uantifjcati tifjcation on (V (VDQ) Q) Ryan Scott PL Wonks March 8, 2019

  2. Code t Code time! me!

  3. The VDQ p he VDQ pat atch ch

  4. --- a/compiler/parser/Parser.y +++ b/compiler/parser/Parser.y +forall_vis_flag :: { ForallVisFlag } + : '.' { ForallInvis } + | '->' { ForallVis } + -- A ctype is a for-all type ctype :: { LHsType GhcPs } - : 'forall' tv_bndrs '.' ctype {% ... + : 'forall' tv_bndrs forall_vis_flag ctype {% ... - HsForAllTy { hst_bndrs = $2 + HsForAllTy { hst_fvf = $3 + , hst_bndrs = $2

  5. --- a/compiler/typecheck/TcHsType.hs +++ b/compiler/typecheck/TcHsType.hs --------- Foralls -tc_hs_type forall@(HsForAllTy { ... }) +tc_hs_type forall@(HsForAllTy { hst_fvf = fvf, ... }) = do { ... - ; let bndrs = mkTyVarBinders Specified tvs' + ; let argf = case fvf of + ForallVis -> Required + ForallInvis -> Specified + bndrs = mkTyVarBinders argf tvs'

  6. forall k -> k -> Type

  7. forall k -> k -> Type {-# LANGUAGE ExplicitForAll #-}

  8. Code t Code time! me! (agai (again)

  9. data F :: forall k -> k -> Type

  10. data F :: forall k -> k -> Type sortOfId :: forall a -> a -> a

  11. data F :: forall k -> k -> Type sortOfId :: forall a -> a -> a

  12. vdqAllowed :: UserTypeCtxt -> Bool

  13. vdqAllowed :: UserTypeCtxt -> Bool -- Currently allowed in the kinds of types... vdqAllowed (KindSigCtxt {}) = True vdqAllowed (TySynCtxt {}) = True

  14. vdqAllowed :: UserTypeCtxt -> Bool -- Currently allowed in the kinds of types... vdqAllowed (KindSigCtxt {}) = True vdqAllowed (TySynCtxt {}) = True -- ...but not in the types of terms. vdqAllowed (FunSigCtxt {}) = False vdqAllowed (InstDeclCtxt {}) = False

  15. VDQ DQ ● An important step towards dependent types in Haskell ● Amaze your friends, impress your coworkers, wow! De Debut buts s in GHC in GHC 8.10!

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend