I want to use Data.Generics to write a function to turn all the Nothings in a data structure into Just defaultValue, as shown below.  I get the following error because the compiler doesn't know enough about Maybe a for mkT to create the generic function that everywhere requires, I guess.

Test.hs:26:16:
    Ambiguous type variable `a' in the constraints:
      `Typeable a'
        arising from a use of `mkT' at Senior/Test2.hs:26:16-30
      `Default a'
        arising from a use of `justDefault' at Senior/Test2.hs:26:20-30
    Probable fix: add a type signature that fixes these type variable(s)

Here is the example.  It all works except for "test".  Any suggestions how to do this?

{-# LANGUAGE  DeriveDataTypeable, FlexibleContexts, FlexibleInstances, MultiParamTypeClasses, RankNTypes, TemplateHaskell, TypeSynonymInstances #-}

{-# OPTIONS_GHC -fallow-undecidable-instances #-}
module Test where

import Data.Generics

class Default a where
    defaultValue :: a

instance Default Int where
    defaultValue = 0

instance Default String where
    defaultValue = ""

instance Default (Maybe a) where
    defaultValue = Nothing

data A = A {b :: Int, c :: Maybe String} deriving (Show, Data, Typeable)

instance Default A where
    defaultValue = A {b = defaultValue, c = defaultValue}

test =
    everywhere (mkT justDefault) (defaultValue :: A)
    where
      justDefault Nothing = Just defaultValue
      justDefault (Just x) = Just x