[Haskell-cafe] Deprecation cycle for classes

Tom Ellis tom-lists-haskell-cafe-2017 at jaguarpaw.co.uk
Sun Jun 16 06:39:35 UTC 2019


On Sun, Jun 16, 2019 at 09:59:27AM +1000, Jack Kelly wrote:
> Tom Ellis <tom-lists-haskell-cafe-2017 at jaguarpaw.co.uk> writes:
> 
> > I am unsure how to change the name of a class in a library whilst providing
> > a safe deprecation cycle for the users of the library.  Suppose I have
> > version 1 of my library with a class
> >
> >     -- Version 1
> >     class Foo a where
> >         foo :: a
> >
> > and I want to migrate it to version 3 as follows, but with a deprecation
> > cycle provided by version 2 that allows code to work with either version 1
> > and 2, or 2 and 3.
> >
> >     -- Version 3
> >     class Bar a where
> >         bar :: a
> 
> What if you inserted Bar as a superclass of Foo in V2?
> 
> -- Version 1
> class Foo a where
>   foo :: a
> 
> -- Version 2
> {-# DEPRECATED Foo "it's going away in V3" #-}
> class Bar a => Foo a where
>   foo :: a
> 
> class Bar a where
>   bar :: a
> 
> -- Version 3
> class Bar a where
>   bar :: a
> 
> Users of version 1 can use Foo/foo/...
> 
> When they upgrade to version 2, they get forced to write a Bar instance,
> get warned that Foo is going away, and they can use the class Bar to
> implement their own instances.

Unfortunately I don't think this scheme allows the user to write code that
is compatible with version 1 and version 2 at the same time.


More information about the Haskell-Cafe mailing list