blob: 95f86143c9fc8ffe13175e6565500526dca42d6f (plain
This could be used in propellor to improve compile time errors.
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.
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]]