
You can export specific pieces explicitely, ie: module AutoTrader.MtGox.Types (MtGoxTicker(MtGoxTicker), tkLast, tkLastAll, etc...) where and it will not export the _ field accessors. It is a hassle, but that's the price you pay for all that code generation. As for the two versions of MtGoxTicker, if they have a lot in common, you might think about using type classes for that. class BasicInfo a where tkHigh :: Lens a a MtGoxPrice MtGoxPrice tkLow :: Lens a a MtGoxPrice MtGoxPrice -- ... class ComplexInfo a where tkAvg :: Lens a a MtGoxPrice MtGoxPrice -- ... data MtGoxTickerBrief = MtGoxTickerBrief { _briefHigh :: MtGoxPrice, _briefLow :: MtGoxPrice } data MtGoxTickerFull = MtGoxTickerFull { _fullHigh :: MtGoxPrice, _fullLow :: MtGoxPrice, _fullAvg :: MtGoxPrice } makeLenses ''MtGoxTickerBrief makeLenses ''MtGoxTickerFull instance BasicInfo MtGoxTickerBrief where tkHigh = briefHigh tkLow = briefLow instance BasicInfo MtGoxTickerFull where tkHigh = fullHigh tkLow = fullLow instance ComplexInfo MtGoxTickerFull where tkAvg = fullAvg I'm sure there are other ways of dealing with it, but this works.