Идиоматический способ обмена определениями поля объектива между модулями

Если у меня есть два модуля, которые оба используют 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

0 ответов

Другие вопросы по тегам