2016-07-26 10 views
3

Ich habe eine Dateistruktur wie folgt aus:Haskell: Acid-State über mehrere Dateien?

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

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

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

Das Problem ist, dass ich makeAcidic ''Database [...] sowohl User.hs und Post.hs ihren Funktionen sauer machen genannt müssen, aber makeAcidic zugleich IsAcidic Instanzen für Database so GHC erzeugen beschwert sich über doppelte Instanz Deklarationen.

Antwort

5

OK, also finde ich es heraus. Trennen Sie einfach die Definition mit dem 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() 
...