<div dir="ltr">This seems to be what I need! I'll give a look.<br></div><div class="gmail_extra"><br><div class="gmail_quote">On Sat, Aug 8, 2015 at 1:24 AM, Matthew Pickering <span dir="ltr"><<a href="mailto:matthewtpickering@gmail.com" target="_blank">matthewtpickering@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Alan Zimmerman and myself have written a library which aims to make<br>
these sorts of transformations easy. We are still in the early stages<br>
but depending on what exactly you want to do then it might be suitable<br>
for your purposes. Looking now on hackage the documentation isn't very<br>
good so it might not be obvious how you're meant to use it.<br>
<br>
<a href="https://hackage.haskell.org/package/ghc-exactprint" rel="noreferrer" target="_blank">https://hackage.haskell.org/package/ghc-exactprint</a><br>
<br>
The basic idea is, use one of the parsers from the Parsers module, do<br>
a (generic) transformation on the resulting ast, then call<br>
`exactPrintWithAnns` on the AST and the resulting annotations. For<br>
simple transformations (moving, deletion, renaming) it is sufficient<br>
to not modify the annotations. When doing insertions/replacements, you<br>
will probably have to modify the annotations in some way to get a<br>
sensible output.<br>
<br>
<a href="https://hackage.haskell.org/package/ghc-exactprint-0.3.1/docs/Language-Haskell-GHC-ExactPrint-Parsers.html" rel="noreferrer" target="_blank">https://hackage.haskell.org/package/ghc-exactprint-0.3.1/docs/Language-Haskell-GHC-ExactPrint-Parsers.html</a><br>
<br>
I don't think I'm quite sure what exactly you want, if you can give a<br>
specific use case then it will help me give a better answer. We also<br>
hang around in #haskell-refactorer if it is transforming source files<br>
that you are interested in.<br>
<br>
Here is an example of how to use the library to insert a type<br>
signature for example.<br>
<br>
<a href="https://github.com/alanz/ghc-exactprint/blob/master/examples/InsertSignature.hs" rel="noreferrer" target="_blank">https://github.com/alanz/ghc-exactprint/blob/master/examples/InsertSignature.hs</a><br>
<br>
Happy to answer any more questions..<br>
<br>
Matt<br>
<div class="HOEnZb"><div class="h5"><br>
On Sat, Aug 8, 2015 at 1:04 AM, Corentin Dupont<br>
<<a href="mailto:corentin.dupont@gmail.com">corentin.dupont@gmail.com</a>> wrote:<br>
> Hi Matthew,<br>
> yes that's exactly that.<br>
> I want to do exactly what you would do with a JSON file (read, write), but<br>
> with a data format that would be valid Haskell (instead of valid<br>
> javascript).<br>
><br>
><br>
> On Fri, Aug 7, 2015 at 8:06 PM, Matthew Pickering<br>
> <<a href="mailto:matthewtpickering@gmail.com">matthewtpickering@gmail.com</a>> wrote:<br>
>><br>
>> Hi Corentin,<br>
>><br>
>> I don't quite understand your question please can you explain a bit<br>
>> more.  Do you want to read a valid haskell source file, perform some<br>
>> changes to the file and then print out a valid source file?<br>
>><br>
>> I am a bit confused about the bit about turing-completeness.<br>
>><br>
>> Matt<br>
>><br>
>> On Fri, Aug 7, 2015 at 7:55 PM, Corentin Dupont<br>
>> <<a href="mailto:corentin.dupont@gmail.com">corentin.dupont@gmail.com</a>> wrote:<br>
>> > Hello!<br>
>> > I'm wondering if it's possible to serialize some data to a format that<br>
>> > is<br>
>> > valid Haskell.<br>
>> > In practice I would read a file like this:<br>
>> ><br>
>> > module Foo where<br>
>> ><br>
>> >   myData :: MyData<br>
>> >   myData = MyData {name = "foo",<br>
>> >                    descr = "test"<br>
>> >                    ...<br>
>> >                    }<br>
>> ><br>
>> > Reading this into a program is easily feasible with Hint, for example.<br>
>> > Then<br>
>> > the program would modify some data and serialize it back to:<br>
>> ><br>
>> > module Foo where<br>
>> ><br>
>> >   myData :: MyData<br>
>> >   myData = MyData {name = "bar",<br>
>> >                    descr = "test2"<br>
>> >                    ...<br>
>> >                    }<br>
>> ><br>
>> > In practice I think that the format should be a subset of Haskell that<br>
>> > is<br>
>> > not Turing-complete.<br>
>> > A bit like JSON, which is a subset of Javascript but not Turing<br>
>> > complete.<br>
>> > Is it possible?<br>
>> ><br>
>> > Thanks,<br>
>> > Corentin<br>
>> ><br>
>> > _______________________________________________<br>
>> > Haskell-Cafe mailing list<br>
>> > <a href="mailto:Haskell-Cafe@haskell.org">Haskell-Cafe@haskell.org</a><br>
>> > <a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe</a><br>
>> ><br>
><br>
><br>
</div></div></blockquote></div><br></div>