A good way to specify such refactorings is as a Haskell module.  For example:


module PreludePre_7_6 where

import Prelude hiding ( catch )


Or, an example of avoiding the Eq / Show / Num debacle:

module PreludePre_7_4 (module Prelude, Num) where

import Prelude hiding ( Num )
import qualified Prelude as P

instance template (Eq a, Show a) => Num a where
  instance P.Num a


(Uses my instance template proposal - though with different keywords -
https://github.com/mgsloan/instance-templates )


Let's say we wanted to rename "catch" to "unsafeCatch"

module PreludePreUnsafeCatch (module Prelude, catch) where

import Prelude hiding (unsafeCatch)

catch = unsafeCatch


Then, an automated refactoring system is "simply" a sourcecode-based
module inliner.  Quite a bit of effort, certainly, but it's much
better than coming up with a whole new notation for refactorings.

-Michael

On Thu, Aug 30, 2012 at 6:34 AM, Alexander Bernauer
<alex-hask...@copton.net> wrote:
> Hi
>
> I agree that automatic code migration can solve this issue in large
> parts. The Python folks have done this to mitigate the transition from
> version 2 to version 3 [1].
>
> On Thu, Aug 30, 2012 at 03:03:05PM +0200, Alexander Kjeldaas wrote:
>> perl -ni -e 'print unless /import Prelude hiding \(catch\)/' $(git grep
>> 'import Prelude hiding (catch)')
>
> I don't think regular expressions are powerful enough. This example
> does not match on hiding multiple names, for instance.
>
> But writing proper 'HsModule -> HsModule' functions should be doable.
>
> And when each release comes with a bunch of such functions, packages
> could be automatically migrated.
>
> Greetings
>
> Alex
>
> [1] http://docs.python.org/library/2to3.html
>
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.4.10 (GNU/Linux)
>
> iEYEARECAAYFAlA/a/oACgkQevm6Dd/q44nJXQCffaxEJ/NZEftgoZ7viAWMuBO3
> +jkAnRTw+VCMQn1k9NibyKpkGMtwvrQw
> =ds3M
> -----END PGP SIGNATURE-----
>
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe@haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to