Идиоматический способ обмена определениями поля объектива между модулями
Если у меня есть два модуля, которые оба используют Control.Lens.TH
' makeFields
для создания полей из записи, и запись в каждом из разных модулей имеет одно и то же имя поля, что является наилучшим способом обеспечения того, чтобы два модуля использовали одно и то же определение name
объектив и HasName
класс без того, чтобы один из модулей зависел от другого?
На данный момент я использую другой модуль с именем SharedFields
с одной записью с каждым полем, которое требует общего доступа, а затем импортировать SharedFields
модуль во всем, что требует генерируемых полей TH - но это неудобно и подвержено ошибкам.
module First where
import Control.Lens
data First = First { firstName :: Bool }
deriving (Read, Show, Eq)
makeFields ''First
module Second where
import Control.Lens
data Second = Second { secondName :: () }
deriving (Read, Show, Eq)
makeFields ''Second
module Third (name) where
import First
import Second