
I have used generics in a couple of places (from the scrap your boilerplate paper) and want to know if it is possible to write a function that will (for example) change the types 'in place' in a type. For example replace all the elements in a tuple with a string (using Show): (3 :: Int,3.5 :: Float,True :: Bool) -> ("3" :: String,"3.5" :: String,"True" :: String) Looking at the paper it seems a version of MkT with a different type is required: MkTT :: (Typeable a,Typeable b,Typeable c,Typeable d) => (c -> d) -> a -> b You could then use: subInt :: Int -> String subInt i = showInt i "" again everywhere has the wrong type so something like: everywhere' :: (Term a,Term b) => (forall c.Term c,forall d.Term d => c -> d) -> a -> b everywhere' f x = f (gmapTT (everywhere' f) x) but can this "gmapTT" be defined in terms of "gfoldl"? I tried to think about this... but I haven't quite got a handle on gfoldl's type yet... Is it possible? Would the function look like the definition of "gmapT" with a different type? Regards, Keean Schupke.
participants (1)
-
MR K P SCHUPKE