-- should have been changed to this, which works
-- foldDoC :: Functor f => (f a -> a) -> A2 (FCon f) -> Con f -> a
-- foldDoC f i (InCon t) = f (fmap (foldDoC f i) t)
-- this original version causes GHC to hang 
foldDoC :: Functor f => (f a -> a) -> Con f -> a 
foldDoC f (InCon t) = f (fmap (foldDoC f) t)
foldDoC :: Functor f => (f a -> a) -> Con f -> a
foldDoC f (InCon t) = f (fmap (foldDoC f) t)
foldDoC f (InCon t) = f (fmap (foldDoC f) t)