Hi,
I'm trying to use SYB to implement some basic relational persistance.
I define a PKey datatype to represent primary keys like this:
newtype PKey a = PKey a
deriving (Show, Typeable, Data)
I then define a sample data type like this:
data User = User {
id :: PKey Int,
firstName :: String,
lastName :: String,
} deriving (Show, Typeable, Data)
Finally, I try to iterate over the structure like this:
test = gmapQ (gshow `ext1Q` aux)
where aux :: PKey a -> String
aux _ = "test"
The problem is that for id gmapQ calls gshow instead of my customized
version (aux). I've seen a discussion on this on haskell cafe at the
following URL:
http://www.opensubscriber.com/message/haskell-cafe@haskell.org/2167871.html
I couldn't understand the following details:
1. Do I need to derive both Typeable and Data instances?
2. Do I need to derive them for both PKey and User or just PKey?
3. Where can I find sample code to derive these instances?
Documentation shows a sample of how GHC derives Data, is that a good
template to use? Also, what's a good example to derive Typeable (if in
fact it needs to be done manually)?
Thanks,
- Slava.