[ghc-steering-committee] Unsaturated type families (#242)

Richard Eisenberg rae at richarde.dev
Fri Dec 4 19:17:07 UTC 2020


The proposal has been accepted on an experimental basis. I added the following text to the proposal itself during acceptance:

Committee Decision
------------------
The committee has accepted this proposal on an *experimental* basis. This
feature is wholly new to Haskell (and to programming, more generally), and
we will learn more from experience. But we cannot gain the experience without
incorporating and releasing the feature. We thus label it as subject to change.
Changes will be incorporated into this document before they are released.

In particular, the following aspects are subject to change:

* Syntax (especially in light of `Proposal #370 <https://github.com/ghc-proposals/ghc-proposals/pull/370>`_).

* The defaulting rules.

These changes might continue (without prior debate here) even after a release, but
all changes will be made in consultation with the GHC developer team, via debate
at `GitLab <https://gitlab.haskell.org/ghc/ghc/>`_.




Thanks, all!
Richard

> On Dec 3, 2020, at 3:27 AM, Simon Peyton Jones via ghc-steering-committee <ghc-steering-committee at haskell.org> wrote:
> 
> I have written a comment on the GitHub thread
> https://github.com/ghc-proposals/ghc-proposals/pull/242#issuecomment-737551909
> 
> I argue for acceptance, but I suggest that we might want to start distinguishing "experimental proposals" from normal proposals.
> 
> Simon
> 
> |  -----Original Message-----
> |  From: ghc-steering-committee <ghc-steering-committee-
> |  bounces at haskell.org> On Behalf Of Eric Seidel
> |  Sent: 03 December 2020 02:30
> |  To: ghc-steering-committee at haskell.org
> |  Subject: Re: [ghc-steering-committee] Unsaturated type families (#242)
> |  
> |  Apologies for being slow, I've left a number of questions on GitHub,
> |  mostly asking for clarification on various points.
> |  
> |  I'm also generally in favor of this proposal, though like others I
> |  have concerns around the defaulting strategies. Mine are mostly around
> |  the large number of rules that I'll have to keep in my head if I need
> |  to start caring about matchabilites. But I'd be happy with some sort
> |  of provisional acceptance, subject to resolving the syntax and
> |  defaulting rules later.
> |  
> |  On Wed, Dec 2, 2020, at 10:30, Spiwack, Arnaud wrote:
> |  > Dear all,
> |  >
> |  > I'm a bit worried by the limited response from the committee on this
> |  > proposal. It is a non-trivial proposal, and I think it deserves more
> |  > eyes. So please have a look at them so that we can commit to this
> |  with
> |  > confidence.
> |  >
> |  > /Arnaud
> |  >
> |  > On Tue, Dec 1, 2020 at 7:28 PM Richard Eisenberg <rae at richarde.dev>
> |  wrote:
> |  > > This thread has seen only positive responses, and with no
> |  responses for the past 6 days. I'm thus inclined to accept the
> |  proposal.
> |  > >
> |  > > However, there are open questions around the following points:
> |  > > * the concrete syntax (pending discussion on #370)
> |  > > * defaulting rules (as raised by Alejandro in this thread)
> |  > >
> |  > > Conveniently, these are both listed as Unresolved Questions in the
> |  proposal itself. We need a way of resolving these questions. The
> |  syntax question may become clearer once we know what to do about #370.
> |  The defaulting question is harder. I vote to return to this question
> |  once #378 has settled somewhat -- but even then, it will be hard.
> |  Still, I think we should move forward with accepting the main
> |  proposal, and we can continue to debate the defaulting strategy in a
> |  further thread, perhaps in parallel with reviewing the (already
> |  existing) implementation.
> |  > >
> |  > > I will accept this proposal as written at the end of the week,
> |  barring commentary here (or on GitHub) to stop me.
> |  > >
> |  > > Thanks!
> |  > > Richard
> |  > >
> |  > > > On Nov 25, 2020, at 10:28 AM, Simon Peyton Jones
> |  <simonpj at microsoft.com> wrote:
> |  > > >
> |  > > > I'm on board with unsaturated type families.
> |  > > >
> |  > > > Like Linear Haskell, it's quite a "big" proposal, but accepting
> |  it is compatible with idea of Haskell as a laboratory for exploration.
> |  I think we should flag it as experimental, with the implication that
> |  details are liable to change as we gain experience.
> |  > > >
> |  > > > Like others, I'd like us to converge on #370 before fixing
> |  syntax.
> |  > > >
> |  > > > I don’t have a strong opinion about the defaulting stuff.
> |  > > >
> |  > > > Declaration of interest: I'm a co-author on the paper.
> |  > > >
> |  > > > Simon
> |  > > >
> |  > > > |  -----Original Message-----
> |  > > > |  From: ghc-steering-committee <ghc-steering-committee-
> |  > > > | bounces at haskell.org> On Behalf Of Richard Eisenberg
> |  > > > |  Sent: 20 November 2020 19:36
> |  > > > |  To: Simon Peyton Jones via ghc-steering-committee
> |  > > > | <ghc-steering-  committee at haskell.org>
> |  > > > |  Subject: [ghc-steering-committee] Unsaturated type families
> |  > > > | (#242)
> |  > > > |
> |  > > > |  Hi committee,
> |  > > > |
> |  > > > |  Csongor Kiss has proposed -XUnsaturatedTypeFamilies.
> |  > > > |
> |  > > > |  Proposal:
> |  > > > |
> |  > > > |
> |  https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%
> |  > > > | 2Fgith
> |  > > > |  ub.com%2Fkcsongor%2Fghc-proposals%2Fblob%2Funsaturated-type-
> |  > > > |  families%2Fproposals%2F0000-unsaturated-type-
> |  > > > |
> |  > > > |
> |  families.rst&data=04%7C01%7Csimonpj%40microsoft.com%7Cbd9e62
> |  > > > | e3137e
> |  > > > |
> |  > > > |
> |  40385b5f08d88d8b91e0%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C1%
> |  > > > | 7C6374
> |  > > > |
> |  14978666235646%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQI
> |  > > > | joiV2l
> |  > > > |
> |  uMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=WdLjCp2ReG9
> |  > > > | ZXOjmE
> |  > > > |  Ow6VCJlAO7Yf1aWkVAXHxrsmMM%3D&reserved=0
> |  > > > |  ICFP'19 paper:
> |  > > > |
> |  https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.
> |  > > > |  microsoft.com%2Fen-
> |  > > > |  us%2Fresearch%2Fuploads%2Fprod%2F2019%2F03%2Funsaturated-
> |  type-
> |  > > > |  families-icfp-
> |  > > > |
> |  > > > |
> |  2019.pdf&data=04%7C01%7Csimonpj%40microsoft.com%7Cbd9e62e313
> |  > > > | 7e4038
> |  > > > |
> |  > > > |
> |  5b5f08d88d8b91e0%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C1%7C63
> |  > > > | 741497
> |  > > > |
> |  8666235646%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV
> |  > > > | 2luMzI
> |  > > > |
> |  iLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=dgowMlsNpH0X9fP
> |  > > > | Ar498F
> |  > > > |  Y9u8xML9n0G1nwvPN4R9HA%3D&reserved=0
> |  > > > |  Discussion:
> |  > > > |
> |  > > > |
> |  https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%
> |  > > > | 2Fgith
> |  > > > |  ub.com%2Fghc-proposals%2Fghc-
> |  > > > |
> |  > > > |
> |  proposals%2Fpull%2F242&data=04%7C01%7Csimonpj%40microsoft.co
> |  > > > | m%7Cbd
> |  > > > |
> |  9e62e3137e40385b5f08d88d8b91e0%7C72f988bf86f141af91ab2d7cd011db4
> |  > > > | 7%7C1%
> |  > > > |
> |  7C1%7C637414978666235646%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjA
> |  > > > | wMDAiL
> |  > > > |
> |  CJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=C
> |  > > > | 9N0y7l
> |  > > > |  KhZsepv0mkXbJOMDVLFi4bN5kaVW7DbXW1ro%3D&reserved=0
> |  > > > |
> |  > > > |  The central idea is to allow type functions (both type
> |  families
> |  > > > | and  type synonyms) to appear unsaturated. (Currently, all
> |  type
> |  > > > | functions  are required syntactically to be applied to all
> |  > > > | parameters they are  declared with.) This poses a problem for
> |  > > > | type inference, as detailed  in both the proposal and the
> |  paper.
> |  > > > | The key question: if we have (f a  ~ g b), can we conclude (f
> |  ~
> |  > > > | g) and (a ~ b)? Not if either of f or g  is a type function.
> |  > > > | This proposal thus describes a mechanism to  introduce a new
> |  > > > | flavor of arrow, such that we can identify type  functions by
> |  > > > | their kind. Specifically, we have regular types like  Maybe ::
> |  > > > | Type -> @M Type (where the M stands for "matchable"), but
> |  type
> |  > > > | functions like F :: Type -> @U Type (where the U stands for
> |  > > > | "unmatchable"). Unmatchable applications can not be decomposed
> |  during  type inference.
> |  > > > |
> |  > > > |  Much of the proposal is concerned with backward-
> |  compatibility:
> |  > > > | most  users will not want to write @M or @U after each of
> |  their
> |  > > > | arrows, so  the proposal describes ways of defaulting this
> |  > > > | behavior to match
> |  > > > |  (most) programmers' expectations.
> |  > > > |
> |  > > > |  The proposal also includes matchability polymorphism, the
> |  > > > | ability to  abstract over a matchability parameter.
> |  > > > |
> |  > > > |  Pros:
> |  > > > |  + This proposal greatly increases the expressiveness of
> |  > > > | Haskell's type  system.
> |  > > > |  + With this proposal, we can finally do proper functional
> |  > > > | programming  in types, rather than just in terms.
> |  > > > |  + This proposal is a key ingredient toward having dependent
> |  > > > | types, as  + unsaturated functions are commonplace in terms,
> |  and
> |  > > > | thus should also  be supported in types. (Allowing unsaturated
> |  > > > | functions in types was a  key difference between Adam Gundry's
> |  > > > | proposal for dependent types
> |  > > > |
> |  https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%
> |  > > > | 2Fadam
> |  > > > |
> |  .gundry.co.uk%2Fpub%2Fthesis%2F&data=04%7C01%7Csimonpj%40mic
> |  > > > | rosoft
> |  > > > |
> |  > > > |
> |  .com%7Cbd9e62e3137e40385b5f08d88d8b91e0%7C72f988bf86f141af91ab2d
> |  > > > | 7cd011
> |  > > > |
> |  db47%7C1%7C1%7C637414978666235646%7CUnknown%7CTWFpbGZsb3d8eyJWIj
> |  > > > | oiMC4w
> |  > > > |
> |  LjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&am
> |  > > > | p;sdat
> |  > > > |
> |  a=wk7Xc%2Bb5FLSrndKYZ2ytJh6gO2oYiCXLDhQhdEOfSOg%3D&reserved=
> |  > > > | 0,  which requires a notion of a subset of the type and term
> |  > > > | languages  shared in common, and mine, which makes no
> |  > > > | distinction between terms  and types.) There is a prototype
> |  > > > | implementation.
> |  > > > |  + The ideas are backed up by peer-reviewed research.
> |  > > > |  + Despite focusing on type families, this work applies
> |  equally
> |  > > > | to  ordinary functions which might be used in types once we
> |  have
> |  > > > | stronger  support for dependent types.
> |  > > > |
> |  > > > |  Cons:
> |  > > > |  - This adds a new dimension of complexity to our kind system,
> |  > > > | by  separating out matchable and unmatchable arrows.
> |  > > > |  - The rules for defaulting appear convenient in practice, but
> |  > > > | are  somewhat arbitrary.
> |  > > > |  - The rules for defaulting care about context -- does an
> |  arrow
> |  > > > | appear  in the type of a term or the type of a type? These
> |  rules
> |  > > > | thus go  against the spirit of #378, which advocates for not
> |  > > > | accepting features  that distinguish between types and terms.
> |  > > > |
> |  > > > |  Recommendation: With reservations, I recommend acceptance. I
> |  > > > | think  that the power to use higher-order programming should
> |  not
> |  > > > | be  restricted to terms, and allowing unsaturated functions at
> |  > > > | compile  time is necessary in order to have convenient
> |  dependent types.
> |  > > > |  However, I am concerned about the extra complexity of
> |  > > > | matchability. A  key open question for me is how much
> |  > > > | matchability is apparent to users
> |  > > > |  -- even ones using some higher-order type-level programming.
> |  If
> |  > > > | matchability is pervasive, then I would lean against. But my
> |  > > > | expectation is that matchability fades into the background --
> |  > > > | much  like levity polymorphism (unless you want it).
> |  > > > |
> |  > > > |  Open question: What to do about syntax? The proposed syntax
> |  is
> |  > > > | sensible. However, #370 suggests an alternative syntax that
> |  > > > | might be  more forward-thinking.
> |  > > > |
> |  > > > |  Richard
> |  > > > |  _______________________________________________
> |  > > > |  ghc-steering-committee mailing list
> |  > > > | ghc-steering-committee at haskell.org
> |  > > > |
> |  > > > |
> |  https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%
> |  > > > | 2Fmail
> |  > > > |  .haskell.org%2Fcgi-bin%2Fmailman%2Flistinfo%2Fghc-steering-
> |  > > > |
> |  > > > |
> |  committee&data=04%7C01%7Csimonpj%40microsoft.com%7Cbd9e62e31
> |  > > > | 37e403
> |  > > > |
> |  > > > |
> |  85b5f08d88d8b91e0%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C1%7C6
> |  > > > | 374149
> |  > > > |
> |  78666235646%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoi
> |  > > > | V2luMz
> |  > > > |
> |  IiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=cIlDCT4r8C8Yc0
> |  > > > | %2BOib
> |  > > > |  Q%2F6Dv1qzBiB1PpavCdAJI3ruw%3D&reserved=0
> |  > >
> |  > > _______________________________________________
> |  > > ghc-steering-committee mailing list
> |  > > ghc-steering-committee at haskell.org
> |  > >
> |  https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fma
> |  > > il.haskell.org%2Fcgi-bin%2Fmailman%2Flistinfo%2Fghc-steering-
> |  committ
> |  > >
> |  ee&data=04%7C01%7Csimonpj%40microsoft.com%7C692997bb67394e8cab4f
> |  > >
> |  08d897335e15%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C1%7C6374255946
> |  > >
> |  59710772%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzI
> |  > >
> |  iLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000&sdata=IBnpaWeHnKRh6p0Sv6s
> |  > > imMc%2Ffai00Qi9%2B8OIsmGPQp0%3D&reserved=0
> |  > _______________________________________________
> |  > ghc-steering-committee mailing list
> |  > ghc-steering-committee at haskell.org
> |  >
> |  https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fmail
> |  > .haskell.org%2Fcgi-bin%2Fmailman%2Flistinfo%2Fghc-steering-
> |  committee&a
> |  >
> |  mp;data=04%7C01%7Csimonpj%40microsoft.com%7C692997bb67394e8cab4f08d897
> |  >
> |  335e15%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C1%7C637425594659710772
> |  >
> |  %7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6I
> |  >
> |  k1haWwiLCJXVCI6Mn0%3D%7C3000&sdata=IBnpaWeHnKRh6p0Sv6simMc%2Ffai00
> |  > Qi9%2B8OIsmGPQp0%3D&reserved=0
> |  >
> |  _______________________________________________
> |  ghc-steering-committee mailing list
> |  ghc-steering-committee at haskell.org
> |  https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fmail
> |  .haskell.org%2Fcgi-bin%2Fmailman%2Flistinfo%2Fghc-steering-
> |  committee&data=04%7C01%7Csimonpj%40microsoft.com%7C692997bb67394e8
> |  cab4f08d897335e15%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C1%7C6374255
> |  94659710772%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMz
> |  IiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000&sdata=IBnpaWeHnKRh6p0Sv6si
> |  mMc%2Ffai00Qi9%2B8OIsmGPQp0%3D&reserved=0
> _______________________________________________
> ghc-steering-committee mailing list
> ghc-steering-committee at haskell.org
> https://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-steering-committee



More information about the ghc-steering-committee mailing list