Создайте третий модуль для взаимозависимых частей:
module Internal where
data Character = Character { name :: String, items :: [Item] }
data ItemEffect = CharacterEffect (Character -> Character)
| ItemEffect (Item -> Item)
data Item = Item { name :: String, weight :: Int, effect :: ItemEffect }
Затем импортируйте его из обоих других модулей и при необходимости реэкспортируйте материал, который вы хотите получить из каждого:
module Character (Character(..), {- etc -}) where
import Internal
-- non-mutually dependent stuff
module Item (Item(..), ItemEffect(..), {- etc -}) where
import Internal
-- non-mutually dependent stuff
Если это пакет Cabal, вы можете скрыть модуль Internal
от остального мира, поместив его в раздел Other-modules
вместо Exported-modules
.
Для полноты: GHC поддерживает взаимно рекурсивные модули , но я бы не рекомендовал это для простых случаев, подобных этому.