我目前正在开展的项目广泛使用persistent
。我想使用json而不是persistent
的准引用语法来指定模型。现在,我使用脚本生成persistent
期望使用simple-templates
的quasiquote。这在工作流程中增加了一个相当尴尬的步骤。使用template-haskell
可以避免这种情况吗?
目前由脚本生成:
-- File : ProjSpecific.Models
share [mkPersist sqlSettings, mkMigrate "migrateAll"]
[persistLowerCase|
Person
name String
age Int Maybe
deriving Show
BlogPost
title String
authorId PersonId
deriving Show
|]
这就是我理想的做法:
-- File : ProjSpecific.Config
import Data.Aeson.QQ
import Data.Aeson (Value)
models :: Value
models = [aesonQQ| {some json encoding of above models} |]
和
-- File : ProjSpecific.Models
complie time logic to generate the persistent models
关于如何做到这一点的任何想法,还是有更好的方法来帮助我正在尝试做什么?
答案 0 :(得分:4)
是的,应该相对无痛。您基本上想要使用persistLowerCase
中的quoteExp字段,它会为您提供类型为String -> Q Exp
的函数。使用预处理器将JSON转换为预期的语法,然后将其传递给函数。