Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database “哈斯克尔”;持久的;模型:如何正确定义交叉引用?_Database_Haskell_Model_Haskell Persistent - Fatal编程技术网

Database “哈斯克尔”;持久的;模型:如何正确定义交叉引用?

Database “哈斯克尔”;持久的;模型:如何正确定义交叉引用?,database,haskell,model,haskell-persistent,Database,Haskell,Model,Haskell Persistent,假设您有两个模型(Foo和Bar),它们都彼此有引用(Foo具有barRef类型BarId和Bar具有fooRef类型FooId)。一切顺利: #!/usr/bin/env stack {- stack script --resolver=lts-9.21 --package=persistent-template -} {-# LANGUAGE GADTs, GeneralizedNewtypeDeriving, QuasiQuotes, TemplateHaskell #-} {-# LAN

假设您有两个模型(FooBar),它们都彼此有引用(Foo具有barRef类型BarIdBar具有fooRef类型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 ()
但如果我将引用类型包装为可能是(仅举一个例子,它可能是向量或其他任何内容):

它失败,出现以下错误:

Not in scope: type constructor or class ‘BarId’

我该如何解决这个问题?

您用于
条形图的语法不正确。像这样的方法应该会奏效:

#!/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 ()

请参阅以获取参考。

实际上,我在使用Vector时遇到了这个问题,出于某种原因,我认为此语法仅适用于Maybe,例如适用于可为空的字段。但我现在意识到,这是任何包装器的一般语法,顺序相反。因此,对于
barModel::Maybe(Vector(BarId))
,它甚至可能是
barModel-BarId-Vector-Maybe
。谢谢@我不确定这样的事情会不会成功。测试一下,让我们知道。我错了,这不是那样的,
也许
只是一个特例。
#!/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 ()