|author||Joey Hess||2019-07-01 15:49:20 -0400|
|committer||Joey Hess||2019-07-01 16:20:51 -0400|
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.
Diffstat (limited to 'doc')
1 files changed, 17 insertions, 19 deletions
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
@@ -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]]