首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Haskell“持久性”模型:如何正确定义交叉引用?

Haskell“持久性”模型:如何正确定义交叉引用?
EN

Stack Overflow用户
提问于 2018-09-09 18:09:30
回答 1查看 285关注 0票数 1

假设您有两个模型(FooBar),它们都相互引用(Foo具有barRef,类型为BarIdE 29E 110条形码>E 211>有E 112fooRefE 213,类型为E 114/code>FooIdE 215)。一切都很顺利:

代码语言:javascript
复制
#!/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 ()

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

代码语言:javascript
复制
#!/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 ()

如果出现此错误,将失败:

代码语言:javascript
复制
Not in scope: type constructor or class ‘BarId’

我该怎么解决这个问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-09 18:23:38

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

代码语言:javascript
复制
#!/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 ()

有关参考,请参阅官方文件

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52247307

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档