{-# LANGUAGE DeriveDataTypeable #-}
import Data.Generics
data D1
= D1
Int String deriving (Data
, Typeable
) data D2
= D2 D1
Int (Int -> Int) deriving (Data
, Typeable
)
count
:: (Data a
, Typeable b
) => b
-> a
-> Intcount t = everything (+) (0 `mkQ` c t)
where
c _ _ = 1
main = do
s = [c,c,c]
d = D2 (D1 i s) i ii
ey0jIExBTkdVQUdFIERlcml2ZURhdGFUeXBlYWJsZSAjLX0KaW1wb3J0IERhdGEuR2VuZXJpY3MKCmRhdGEgRDEgPSBEMSBJbnQgU3RyaW5nIGRlcml2aW5nIChEYXRhLCBUeXBlYWJsZSkKZGF0YSBEMiA9IEQyIEQxIEludCAoSW50IC0+IEludCkgZGVyaXZpbmcgKERhdGEsIFR5cGVhYmxlKQoKY291bnQgOjogKERhdGEgYSwgVHlwZWFibGUgYikgPT4gYiAtPiBhIC0+IEludApjb3VudCB0ID0gZXZlcnl0aGluZyAoKykgKDAgYG1rUWAgYyB0KQogIHdoZXJlCiAgICBjIDo6IGEgLT4gYSAtPiBJbnQKICAgIGMgXyBfID0gMQogICAgCm1haW4gPSBkbwogIGxldCBjID0gdW5kZWZpbmVkIDo6IENoYXIKICAgICAgaSA9IHVuZGVmaW5lZCA6OiBJbnQKICAgICAgaWkgPSB1bmRlZmluZWQgOjogSW50IC0+IEludAogICAgICBzID0gW2MsYyxjXQogICAgICBkID0gRDIgKEQxIGkgcykgaSBpaQogIHByaW50IC4gY291bnQgYyAkIGQKICBwcmludCAuIGNvdW50IGkgJCBkCiAgcHJpbnQgLiBjb3VudCBpaSAkIGQKICBwcmludCAuIGNvdW50IHMgJCBkCg==