If you have that many constructors, you probably aren't pattern-matching against the whole thing everywhere. So you could extract the few functions that use the entire type for case analysis into a typeclass, make each constructor its own type, and implement the typeclass:
Instead of:
something :: A -> IO ()
something A1 = putStrLn "hello"
something (A2 _) = putStrLn "world"
Use:
data A1
data A2 = A2 Int
class RelatedConst a of
something :: a -> IO ()
instance RelatedConst A1 where
something _ = putStrLn "hello"
instance RelatedConst A2 where
something _ = putStrLn "world"
Then, each declaration and instance could go in its own file.
If on the other hand, you are using lots of partial case matches everywhere, see if there are commonalities and extract a typeclass for each group