
Hugh Perkins wrote:
Unfortunately I cant seem to run it. It comes up with strange typing messages when compiling: *TestDeserialize> serialize P
<interactive>:1:0: No instance for (LDat (TL_red [a]) ... where P is:
getP = P "Lammel" "Amsterdam"
(for simplicity)
Similar looking errors with genCom, and/or with deserialize.
I guess I need to add an instance or deriving statement to the P class?
You have encountered a bit confusing behavior of GHCi. If you put
getP = P "Lammel" "Amsterdam" t2 = serialize getP
into the file Deserialize.hs, which you then load into GHCi, you can type "t2" at the GHCi prompt and see the expected result. OTH, typing "serialize getP" at the GHCi prompt gives the error you reported. This is a well known issue with GHCi: it uses the flags given in the OPTIONS_GHC pragma when interpreting files, but forgets these flags when interpreting expressions typed at the prompt. I think this a bit confusing behavior started since GHC 6.4.0. So, you could place any complex expression in a file and load that into GHCi (Haskell Emacs mode makes this quite convenient), or start your GHCi with appropriate flags (at least, -fglasgow-exts). The third alternative is to help GHCi by defining serialize like the following
serialize1 xs = gapp (TL_red (concat::[[String]]->[String])) primitive_fields_show xs
with the explicit signature for 'concat'. We can now type "serialize1 getP" at the GHCi prompt and get the desired result.