On 7/9/11, yi huang <
yi.codeplayer@gmail.com> wrote:
> 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.