how to reify a list of data using Data.Reify?
===

I tried to read the paper (<http://www.ittc.ku.edu/csdl/fpg/sites/default/files/Gill-09-TypeSafeReification.pdf>) and managed to reify my symbolic expression type, but I can't figure out how to reify a list of them. Here's the simplified code:

    {-# OPTIONS_GHC -Wall #-}
    {-# Language TypeOperators #-}
    {-# Language TypeFamilies #-}
    {-# Language FlexibleInstances #-}
    
    import Control.Applicative
    import Data.Reify
    
    -- symbolic expression type
    data Expr a = EConst a
                | EBin (Expr a) (Expr a)
                deriving Show

    -- corresponding node type
    data GraphExpr a b = GConst a
                       | GBin b b
                       deriving Show

    instance MuRef (Expr a) where
      type DeRef (Expr a) = GraphExpr a
      mapDeRef _ (EConst c)  = pure (GConst c)
      mapDeRef f (EBin u v) = GBin <$> f u <*> f v
    
    -- this works as expected
    main :: IO ()
    main = reifyGraph (EBin x (EBin x y)) >>= print
      where
        x = EConst "x"
        y = EConst "y"
    -- (output: "let [(1,GBin 2 3),(3,GBin 2 4),(4,GConst "y"),(2,GConst "x")] in 1")
    
    -- but what if I want to reify a list of Exprs?
    data ExprList a = ExprList [Expr a]
    data GraphList a b = GraphList [GraphExpr a b]
    
    instance MuRef (ExprList a) where
      type DeRef (ExprList a) = GraphList a
      --  mapDeRef f (ExprList xs) = ???????