[Haskell-cafe] Generic parser without GADTs

Huong Nguyen hiperfume at gmail.com
Sun Oct 16 22:57:27 EDT 2005

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:


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"}





Main>showType r1

"\"(\"[\"x\",\"y\"]\"x^2 + y^2 < 20\"\")\""

Main>showType r2

Main>showType r3

Now, I want to write a function to see the result in its original type, for
example :
input: "False"
output: False


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 ?

From: oleg at pobox.com <oleg at pobox.com >
Date: Oct 16, 2005 8:50 PM
Subject: [Haskell-cafe] Generic parser without GADTs
To: haskell-cafe at haskell.org
Cc: ralf at 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 at haskell.org
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org//pipermail/haskell-cafe/attachments/20051016/31edb6ea/attachment.htm

More information about the Haskell-Cafe mailing list