[Haskell-cafe] Serialize to Haskell

Matthew Pickering matthewtpickering at gmail.com
Fri Aug 7 23:24:36 UTC 2015


Alan Zimmerman and myself have written a library which aims to make
these sorts of transformations easy. We are still in the early stages
but depending on what exactly you want to do then it might be suitable
for your purposes. Looking now on hackage the documentation isn't very
good so it might not be obvious how you're meant to use it.

https://hackage.haskell.org/package/ghc-exactprint

The basic idea is, use one of the parsers from the Parsers module, do
a (generic) transformation on the resulting ast, then call
`exactPrintWithAnns` on the AST and the resulting annotations. For
simple transformations (moving, deletion, renaming) it is sufficient
to not modify the annotations. When doing insertions/replacements, you
will probably have to modify the annotations in some way to get a
sensible output.

https://hackage.haskell.org/package/ghc-exactprint-0.3.1/docs/Language-Haskell-GHC-ExactPrint-Parsers.html

I don't think I'm quite sure what exactly you want, if you can give a
specific use case then it will help me give a better answer. We also
hang around in #haskell-refactorer if it is transforming source files
that you are interested in.

Here is an example of how to use the library to insert a type
signature for example.

https://github.com/alanz/ghc-exactprint/blob/master/examples/InsertSignature.hs

Happy to answer any more questions..

Matt

On Sat, Aug 8, 2015 at 1:04 AM, Corentin Dupont
<corentin.dupont at gmail.com> wrote:
> Hi Matthew,
> yes that's exactly that.
> I want to do exactly what you would do with a JSON file (read, write), but
> with a data format that would be valid Haskell (instead of valid
> javascript).
>
>
> On Fri, Aug 7, 2015 at 8:06 PM, Matthew Pickering
> <matthewtpickering at gmail.com> wrote:
>>
>> Hi Corentin,
>>
>> I don't quite understand your question please can you explain a bit
>> more.  Do you want to read a valid haskell source file, perform some
>> changes to the file and then print out a valid source file?
>>
>> I am a bit confused about the bit about turing-completeness.
>>
>> Matt
>>
>> On Fri, Aug 7, 2015 at 7:55 PM, Corentin Dupont
>> <corentin.dupont at gmail.com> wrote:
>> > Hello!
>> > I'm wondering if it's possible to serialize some data to a format that
>> > is
>> > valid Haskell.
>> > In practice I would read a file like this:
>> >
>> > module Foo where
>> >
>> >   myData :: MyData
>> >   myData = MyData {name = "foo",
>> >                    descr = "test"
>> >                    ...
>> >                    }
>> >
>> > Reading this into a program is easily feasible with Hint, for example.
>> > Then
>> > the program would modify some data and serialize it back to:
>> >
>> > module Foo where
>> >
>> >   myData :: MyData
>> >   myData = MyData {name = "bar",
>> >                    descr = "test2"
>> >                    ...
>> >                    }
>> >
>> > In practice I think that the format should be a subset of Haskell that
>> > is
>> > not Turing-complete.
>> > A bit like JSON, which is a subset of Javascript but not Turing
>> > complete.
>> > Is it possible?
>> >
>> > Thanks,
>> > Corentin
>> >
>> > _______________________________________________
>> > Haskell-Cafe mailing list
>> > Haskell-Cafe at haskell.org
>> > http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
>> >
>
>


More information about the Haskell-Cafe mailing list