Can i define a record without defining access method.

I'm trying to create a haskell implementation of json rpc, I try to define protocol using record like this: data Request = Request { version :: Integer , id :: Integer , method :: String , args :: [Value] } deriving (Typeable, Data, Show) data Response = Response { version :: Integer , id :: Integer , code :: Integer , method :: String , result :: Value } deriving (Typeable, Data, Show) so i can use json library to encode/decode it. But this code fails, because haskell will define access function automaticlly, and function names conflicts. My question is, is there a way i can define record without access function, so i can have same attribute name in multiple record. -- http://www.yi-programmer.com/blog/

On 7/9/11, yi huang
I'm trying to create a haskell implementation of json rpc, I try to define protocol using record like this:
data Request = Request { version :: Integer , id :: Integer , method :: String , args :: [Value] } deriving (Typeable, Data, Show)
data Response = Response { version :: Integer , id :: Integer , code :: Integer , method :: String , result :: Value } deriving (Typeable, Data, Show)
so i can use json library to encode/decode it. But this code fails, because haskell will define access function automaticlly, and function names conflicts. My question is, is there a way i can define record without access function, so i can have same attribute name in multiple record.
If you don't want access functions defined, you can simply not name your record fields: data Request = Request Integer Integer String [Value] deriving (Typeable, Data, Show) If you want it to be more readable, you can define type synonyms: type ID = Integer type Version = Integer [...] data Request = Request Version ID Method Args deriving (Typeable, Data, Show) The two "instances" of ID won't conflict, then. Tom
participants (2)
-
Tom Murphy
-
yi huang