Ответ 1
Создайте третий модуль для взаимозависимых частей:
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 поддерживает взаиморекурсивные модули, но я бы не рекомендовал это для простых случаев, подобных этому.