Haskell: кислотное состояние для нескольких файлов?

У меня есть такая файловая структура:

--- Database.hs ---
data Database = ...
...

--- User.hs ---
import Database
addUser :: Update Database ()
...

--- Post.hs
import Database
addPost :: Update Database ()
...

Проблема в том, что мне нужно вызывать makeAcidic ''Database [...] как в User.hs, так и в Post.hs, чтобы сделать их функции кислотными, но makeAcidic в то же время генерировать IsAcidic экземпляров для Database, поэтому GHC жалуется на дублирующие объявления экземпляров.


person sqd    schedule 26.07.2016    source источник


Ответы (1)


Хорошо, так что я разбираюсь. Просто разделите определение с помощью Template Haskell:

--- Database/Types.hs ---
data Database = ...
...

--- Database.hs ---
import Database.Types
import User
import Post
makeAcidic ''Database [addUser, addPost]

--- User.hs ---
import Database.Types
addUser :: Update Database ()
...

--- Post.hs ---
import Database.Types
addPost :: Update Database ()
...
person sqd    schedule 26.07.2016