Hello haskellers,

Anyone know the trick for making a Binary instance of a GADT.
See sample code below followed by the type error reported by ghc version 6.8.3

Thanks,
Tony

----
{-# LANGUAGE GADTs #-}

module GADTTest where

import Data.Binary
import Control.Monad (liftM)

data Query a where
    Lookup :: String -> Query (Maybe Int)
    Fetch :: [String] -> Query [Int]

instance (Binary a) => Binary (Query a) where
    put (Lookup x) = putWord8 0 >> put x
    put (Fetch x) = putWord8 1 >> put x
    get = getWord8 >>= \tag -> case tag of
        0 -> liftM Lookup get
        1 -> liftM Fetch get
-----

GADTTest.hs:12:0:
    Couldn't match expected type `Maybe Int'
           against inferred type `[Int]'
    When trying to generalise the type inferred for `get'
      Signature type:     forall a. (Binary a) => Get (Query a)
      Type to generalise: Get (Query a)
    In the instance declaration for `Binary (Query a)'