
I'm afraid I don't like this either. I think of it like this. It's like functional dependencies. With fundeps, if you have class C a b | a -> b instance C Int Bool and you have a "wanted" constraint (C Int t), then you add a new "wanted" constraint (t ~ Bool). With luck that forces t to be Bool (maybe it's a unification variable right now) and you can solve with the instance decl. This proposal say if you have instance force C Int Bool and you have a "wanted" constraint (C ty1 ty2), then add the wanted constraints (ty1 ~ Int) and (ty2 ~ Bool). Very similar in flavour and mechanism. No need to do this ill-specified "change the type of imported functions" stuff. It'd work fine for instance force C [a] too, which the proposal doesn't allow. That could mean (like fundeps) that if you have a "wanted" (C ty) then you get a new wanted (ty ~ [alpha]) where alpha is a fresh unification variable. That is, you are constraining the shape of the argument to C. But still I don't like it much. I don't understand this business of "C is effectively not in scope". I'm sure it won't be long before someone wants to export/import these 'instance force' decls. And yes it does have a funny overlap with the existing 'default' mechanism. Overall I think it's defensible, but doesn't pay its way in cost/benefit terms. Simon | -----Original Message----- | From: ghc-steering-committee [mailto:ghc-steering-committee- | bounces@haskell.org] On Behalf Of Manuel M T Chakravarty | Sent: 26 April 2017 12:46 | To: ghc-steering-committee@haskell.org | Subject: [ghc-steering-committee] Proposal #23: instance force | | We need to decide whether we like to accept the ”instance force" | proposal: | | | https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.c | om%2Fghc-proposals%2Fghc- | proposals%2Fpull%2F23&data=02%7C01%7Csimonpj%40microsoft.com%7Ce91dc04dd2 | df4d1730aa08d48c99ca38%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C63628 | 8039526075481&sdata=MKBjrTGX4kdlvBJMQeVzUxg2d%2BXBBHAlUS4FfEIPc5I%3D&rese | rved=0 | | While I understand and am in favour of the motivation behind the | proposal, I like to propose to reject the proposal in its current form. | | My reasons are the following: | | * The proposal is an ad hoc approach to adding additional type | constraints to qualified types involving a specific type class. | | * I am against adding the proposed ”instance force” declaration form as | its *main* motivation is to simplify error messages and type signatures | printed by GHCi — i.e., it is of a diagnostic and informative nature. | | * Something like that does IMHO not belong into the language, but needs | to be part of the configuration of the compilation system. In other | words, it ought to be a, e.g., compiler option or a language pragma, but | not a declaration form. | | In summary, I’d like to suggest to find an alternative means to get GHC | to add the additional constraints to simplify diagnostics and type | queries without encumbering the language itself. | | Cheers, | Manuel | | _______________________________________________ | ghc-steering-committee mailing list | ghc-steering-committee@haskell.org | https://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-steering-committee