ANN: ban-instance-0.1.0.1

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

ANN: ban-instance-0.1.0.1

Jack Kelly
I have just pushed an initial release of ban-instance[1] to Hackage.

ban-instance uses template haskell to generate compile errors for
typeclass instances that should not exist:

  -- Declare that Foo should never have a ToJSON instance
  $(banInstance [t|ToJSON Foo|] "why ToJSON Foo should never be defined")

The custom errors then say why an instance is banned:

     • Attempt to use banned instance (ToJSON Foo)
        Reason for banning: why ToJSON Foo should never be defined
        Instance banned at [moduleName] filePath:lineNumber

We have found this useful to prevent definition of ToJSON/FromJSON
instances on core data types, as this forces programmers to instead
place the serialisation instances on newtypes at the serialisation
boundary.

GitHub issues and PRs are welcome[2]. In particular, there are currently
a few limitations:

1. There is currently no support for classes with associated types or
   associated data types;

2. It would be great to generate haddocks for banned instances, marking
   them as such; and

3. Type quotations [t|...|] do not support free variables (GHC#5616).

Nevertheless, I hope that it is useful.

Best,

-- Jack

[1]: http://hackage.haskell.org/package/ban-instance-0.1.0.1
[2]: https://github.com/qfpl/ban-instance/
_______________________________________________
Haskell-Cafe mailing list
To (un)subscribe, modify options or view archives go to:
http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
Only members subscribed via the mailman list are allowed to post.