I think it's pretty good as-is. * Use an open family (with non-overlapping instances) to get yourself into part of the match space: type instance OpenF (Foo b c) = FFoo (Foo b c) * Use a closed family (with overlap and top-to-bottom matching) to deal with that part of the space: type family FFoo a where FFoo (Foo Int c) = ... Doing this was a HUGE improvement, allowing us to cleanly split the issues of top-to-bottom matching from those of non-overlapping open families. | It also BTW cuts us off from using Closed Families as Associated types | separated into their Class instances. I don't understand this comment. Can you give an example that the current setup does not handle? Simon | -----Original Message----- | From: Glasgow-haskell-users [mailto:glasgow-haskell-users- | bounces@haskell.org] On Behalf Of AntC | Sent: 04 June 2015 01:54 | To: glasgow-haskell-users@haskell.org | Subject: Re: Closed Type Families: separate instance groups? | | > Richard Eisenberg <eir <at> cis.upenn.edu> writes: | > | > You can always define a helper closed type family and have an open | > type family instance just call a closed type family. | | Thank you Richard, you mean like: | | type family OpenF a | | ... | | type instance OpenF (Foo b c) = FFoo (Foo b c) | type family FFoo a where | FFoo (Foo Int c) = ... | ... | | OK. (Seems rather verbose.) | | > | > Having closed type families, as opposed to branched instances, just | > seemed like a cleaner way to package the new functionality. | > There really wasn't much to it other than aesthetics, if I recall | the | > conversations correctly. | | I recall the conversation quite well. | (In fact I think it was me who suggested type family ... where ... ) I | think it was less to do with aesthetics, and more to do with reducing | verbosity in a common use case. | | It somehow doesn't seem as clean as old-fashioned overlapping | instances. | (I agree it does seem cleaner than overlaps with FunDeps.) | | It also BTW cuts us off from using Closed Families as Associated types | separated into their Class instances. | I think there's two use cases going on: | - one where we want to see all the instances together | that fits well to type family ... where ... | - t'other where we want everything to do with a type constructor | together | that fits better with the separate instances | | AntC | | | | _______________________________________________ | Glasgow-haskell-users mailing list | Glasgow-haskell-users@haskell.org | http://mail.haskell.org/cgi-bin/mailman/listinfo/glasgow-haskell-users