gpt4 book ai didi

database - haskell "persistent"模型 : How to correctly define cross-reference?

转载 作者:搜寻专家 更新时间:2023-10-30 20:23:15 25 4
gpt4 key购买 nike

假设您有两个模型(FooBar)并且它们都相互引用(FoobarRef 类型为 BarIdBarfooRef 类型为 FooId)。一切顺利:

#!/usr/bin/env stack
{- stack script --resolver=lts-9.21 --package=persistent-template -}
{-# LANGUAGE GADTs, GeneralizedNewtypeDeriving, QuasiQuotes, TemplateHaskell #-}
{-# LANGUAGE TypeFamilies, MultiParamTypeClasses #-}

import Database.Persist.TH

mkPersist sqlSettings [persistLowerCase|
Foo
barModel BarId
fooField Int

Bar
fooModel FooId
barField Int
|]

main = pure ()

但是如果我将引用类型包装为Maybe(只是一个例子,它可以是Vector 或其他任何类型):

#!/usr/bin/env stack
{- stack script --resolver=lts-9.21 --package=persistent-template -}
{-# LANGUAGE GADTs, GeneralizedNewtypeDeriving, QuasiQuotes, TemplateHaskell #-}
{-# LANGUAGE TypeFamilies, MultiParamTypeClasses #-}

import Database.Persist.TH

mkPersist sqlSettings [persistLowerCase|
Foo
barModel (Maybe BarId)
fooField Int

Bar
fooModel FooId
barField Int
|]

main = pure ()

失败并出现此错误:

Not in scope: type constructor or class ‘BarId’

我应该如何解决这个问题?

最佳答案

您用于 Bar 模型的语法不正确。这样的事情应该有效:

#!/usr/bin/env stack
-- stack script --resolver lts-12.7

{-# LANGUAGE GADTs, GeneralizedNewtypeDeriving, QuasiQuotes, TemplateHaskell #-}
{-# LANGUAGE TypeFamilies, MultiParamTypeClasses #-}

import Database.Persist.TH

mkPersist sqlSettings [persistLowerCase|
Foo
barModel BarId Maybe
fooField Int

Bar
fooModel FooId
barField Int
|]

main = pure ()

参见 official docs供引用。

关于database - haskell "persistent"模型 : How to correctly define cross-reference?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52247307/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com