[Haskell-cafe] XmlSerializer.deserialize?
Hugh Perkins
hughperkins at gmail.com
Tue Jun 26 15:26:00 EDT 2007
On 6/25/07, Udo Stenzel <u.stenzel at web.de> wrote:
>
> That type signature describes a function that can deliver *anything*
> (that is in class Data), whatever you ask from it.
Yes, that is the goal :-)
> If you do that, you wind up dragging in all the
> machinery of Data.Generic
Is reflection hard in Haskell? In C# its easy, and its one of the most
powerful features of C#
just to implement what HaXml does with much
> simpler technology. I doubt that's what you actually want.
It is exactly what I want ;-) haxml needs a DTD.
On the other hand, I might be misunderstanding. In that case,
> Data.Generics should have everything you need, in particular gunfold and
> friends.
Yes, but I'm kindof stuck giving useful input to makeConstrM, so if anyone
has any ideas?
kpreid in irc gave me an example of using makeConstrM for a pair of strings
, but I cant seem to generalize it to work with a custom data type
containing strings and ints ( eg Config{ login :: String, maxLogAgeDays ::
Int } )
Current (not working) code looks something like the following. Most of the
working bits of testConstrM' / runM' come from kpreid, the rest is my feeble
attempts to tweak it.
runM' :: (MonadState [String] m, Monad m, Data a) => m a
runM' = do
value <- gets head
modify tail
-- then one of: (pick the non-working function of your choice ;-) :
-- return read (fromJust value)
-- return (fromJust $ cast value )
-- return (fst $ head $ gread( "(" ++ value ++ ")" ) )
-- return (fromConstrM runM' constr)
-- return (fromConstr contr)
testConstrM' :: (Read a, Data a, Read c, Read b, Data b, Data c) => [String]
-> a -> (b,c)
testConstrM' fieldvalues object = evalState( fromConstrM runM' (toConstr
object) ) fieldvalues
data Config = Config{ name :: String, age :: Int }
deriving( Data, Show, Typeable, Ord, Eq, Read )
createConfig = Config "blah" 3
test = testConstrM' ["qsdfqsdf", "7"] createConfig
(I've left out the xml parsing bit, which you can find at:
http://www.haskell.org/haskellwiki/HXT section 9.1.1/9.1.2)
Maybe I should escalate the question to the haskell at haskell.org group?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org/pipermail/haskell-cafe/attachments/20070626/635dc671/attachment-0001.htm
More information about the Haskell-Cafe
mailing list