1import Data.Generics.Uniplate.Internal.Data
2import Data.Data
3
4instance Data a => Uniplate a where
5    uniplate = uniplateData $ fromOracle answer
6        where answer = hitTest (undefined :: a) (undefined :: a)
7
8    descend = descendData $ fromOracle answer
9        where answer = hitTest (undefined :: a) (undefined :: a)
10
11    descendM = descendDataM $ fromOracle answer
12        where answer = hitTest (undefined :: a) (undefined :: a)
13
14instance (Data a, Data b, Uniplate b) => Biplate a b where
15    biplate = biplateData $ fromOracle answer
16        where answer = hitTest (undefined :: a) (undefined :: b)
17
18    descendBi = descendBiData $ fromOracle answer
19        where answer = hitTest (undefined :: a) (undefined :: b)
20
21    descendBiM = descendBiDataM $ fromOracle answer
22        where answer = hitTest (undefined :: a) (undefined :: b)
23