假设您有两个模型(Foo和Bar),它们都相互引用(Foo具有barRef,类型为BarIdE 29和E 110条形码>E 211>有E 112fooRefE 213,类型为E 114/code>FooIdE 215)。一切都很顺利:
#!/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或其他任何东西):
#!/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’我该怎么解决这个问题?
发布于 2018-09-09 18:23:38
用于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 ()有关参考,请参阅官方文件。
https://stackoverflow.com/questions/52247307
复制相似问题