From 14f6ae30809d8bbdb10b91cc59757e865a365df8 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Mon, 1 Jul 2019 15:49:20 -0400 Subject: custom type error messages * Avoid displaying an excessive amount of type error messages when many properties have been combined in a props list. * Added custom type error messages when Properties don't combine due to conflicting metatypes. * Added custom type error messages for ensureProperty and tightenTargets. * ensureProperty: The constraints have been simplified to EnsurePropertyAllowed. (API change) * ensureProperty: The contraints have been simplified to TightenTargetsAllowed. (API change) * CheckCombinable generates a Bool. (API change) This commit was sponsored by Jake Vosloo on Patreon. --- doc/todo/use_ghc_8.0_custom_compile_errors.mdwn | 36 ++++++++++++------------- 1 file changed, 17 insertions(+), 19 deletions(-) (limited to 'doc') diff --git a/doc/todo/use_ghc_8.0_custom_compile_errors.mdwn b/doc/todo/use_ghc_8.0_custom_compile_errors.mdwn index 95f86143..8c2ed77a 100644 --- a/doc/todo/use_ghc_8.0_custom_compile_errors.mdwn +++ b/doc/todo/use_ghc_8.0_custom_compile_errors.mdwn @@ -6,27 +6,25 @@ For example, a RevertableProperty is sometimes used where only a regular Property is accepted. In this case, the error could suggest that the user apply `setupRevertableProperty` to extract the setup side of the RevertableProperty. +> I tried this, it didn't seem worth the complication however. --[[Joey]] + And, when a Property HasInfo is provided to ensureProperty, propellor could explain, in the compile error, why it can't let the user do that. -Custom errors need a type class to be used. So, could do something like this: - - class NeedsProperty a where - withProperty :: (Property metatype -> b) -> b - - instance NeedsProperty (Property metatype) where withProperty = id - - instance TypeError (Text "Use setupRevertableProperty ...") - => NeedsProperty RevertableProperty where - withProperty = error "unreachable" - -(While propellor needs to be buildable with older versions of ghc, -the `instance TypeError` can just be wrapped in an ifdef to make it only be -used by the new ghc.) - -> The new type-errors library builds a lot of stuff on top of this. -> Its ability to detect "stuckness" seems like it may be able to catch -> the very long type errors that we sometimes see when using propellor, and -> whittle them down to a more useful error. --[[Joey]] +> Done this and also used custom errors when properties' types don't let +> them be combined. --[[Joey]] + +The new type-errors library builds a lot of stuff on top of this. +Its ability to detect "stuckness" seems like it may be able to catch +the very long type errors that we sometimes see when using propellor, and +whittle them down to a more useful error. --[[Joey]] + +> > Actually I think the stuckness would not help with that, though it +> > could help with other mistakes. In particular, forgetting to provide +> > a parameter to a property constructor can lead to a massive +> > error message that leaks type family stuff from MetaTypes, due to +> > the type checker getting stuck. Detecting that and replacing it with +> > a simpler error would be a big improvement. Such large error messages +> > can make ghc use an excessive amount of memory. --[[Joey]] [[!tag user/joey]] -- cgit v1.2.3