Re: [Haskell-cafe] Generic parser without GADTs
Hi all, You are talking about parsing and data type, so I want to ask you a question relating to my data type. I have a data types and a function as follows: \begin{code} data Type a = C1 { x :: [String] ,y :: Type a} | C2 {x1 :: String} | C3 {y1 :: Bool} deriving Show showType :: Type a -> String showType (C2 a) = show a showType (C3 a) = show a showType (C1 a b) = show "(" ++ (show a) ++ (showType b) ++ (show ")") r1 = C1 { x = ["x","y"] , y = C2{x1 = "x^2 + y^2 < 20"} } r2=C3{y1=False} r3=C2{x1="x+y=z"} \end{code} --Result: Main>showType r1 "\"(\"[\"x\",\"y\"]\"x^2 + y^2 < 20\"\")\"" Main>showType r2 "False" Main>showType r3 "\"x+y=z\"" Now, I want to write a function to see the result in its original type, for example : input: "False" output: False input:"\"x+y=z\"" output:"x+y=z" input:"\"(\"[\"x\",\"y\"]\"x^2 + y^2 < 20\"\")\"" output:(["x","y"]x^2 + y^2 < 20") So, how I should write the function ? Do you have any idea about this ? Thanks. From: oleg@pobox.com <oleg@pobox.com > Date: Oct 16, 2005 8:50 PM Subject: [Haskell-cafe] Generic parser without GADTs To: haskell-cafe@haskell.org Cc: ralf@informatik.uni-bonn.de Also inspired by Ralf Hinze's post, I thought of removing GADTs from that code. The result is Haskell98! code, which works well in Hugs. The code seems to be a bit simpler too. Like the original code, the function 'parseAny' correctly discriminates between the list of characters (i.e., strings) and the list of other things. {-- Haskell98! --} class Type a where parse :: ReadS a
hugs /tmp/h.hs Haskell 98 mode: Restart with command line option -98 to enable extensions
Main> parseAny "4711" [(ValInt 4711,"")] Main> parseAny "\"4711\"" [(ValString "4711","")] Main> parseAny "[4711, 0]" [(ValList [ValInt 4711,ValInt 0],"")] Main> parseAny "[4711, 'a']" [(ValList [ValInt 4711,ValChar 'a'],"")] Main> parseAny "[\"hello world\"] x" [(ValList [ValString "hello world"]," x")] ______________________________ _________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
participants (1)
-
Huong Nguyen