{-# LANGUAGE PolyKinds #-} module Data.Generics.Internal.Void ( -- $note Void , Void1 , Void2 ) where -- -- $note -- = Uncluttering type signatures -- -- Because the various instances in the library always match (the Has* classes -- are essentially glorified constraint synonyms), they get replaced with -- their constraints, resulting in large, unreadable types. -- -- Writing an (overlapping instance) for this Void type means that the original -- instance might not be the one selected, thus GHC leaves the constraints in -- place until further information is provided, at which point the type -- machinery has sufficient information to reduce to sensible types. data Void data Void1 a data Void2 a b