Haskell 如何导入newtype实例

Haskell 如何导入newtype实例,haskell,ghc,Haskell,Ghc,我将生成记录类型的持久代码提取到一个单独的模块Dao中 我希望保持导入的干净和严格,所以我尝试显式地从Dao模块导入我需要的所有类型和函数。我坚持使用newtype实例作为键。钥匙不是我喜欢的类型。它是在持久化库中定义的 import Dao -- work but it is a mystery how much is imported GHC 8.6.5看起来相当聪明,甚至试图帮助我克服困难: In module `Dao': `RedirectMappingRKey'

我将生成记录类型的持久代码提取到一个单独的模块Dao中 我希望保持导入的干净和严格,所以我尝试显式地从Dao模块导入我需要的所有类型和函数。我坚持使用newtype实例作为键。钥匙不是我喜欢的类型。它是在持久化库中定义的

import Dao -- work but it is a mystery how much is imported
GHC 8.6.5看起来相当聪明,甚至试图帮助我克服困难:

    In module `Dao':
      `RedirectMappingRKey' is a data constructor of `Key'
    To import it use
      import Dao( Key( RedirectMappingRKey ) )
    or
      import Dao( Key(..) )
   |
52 | import Dao (openDbPool, RedirectMappingR(..), RedirectMappingRKey)

但GHC建议的两个版本均被其拒绝:

    Module `Dao' does not export `Key(RedirectMappingRKey)'
   |
52 | import Dao (openDbPool, RedirectMappingR(..), Key(RedirectMappingRKey))

实例定义

*Dao> :i RedirectMappingRKey
newtype instance persistent-2.9.2:Database.Persist.Class.PersistEntity.Key
                   RedirectMappingR
  = RedirectMappingRKey {...}

我没主意了,也许有资格的进口能帮我, 但我想知道最好的解决办法

钥匙不是我喜欢的类型。它是在持久化库中定义的


然后您不能从Dao导入它,除非Dao在其导出列表中明确列出了键,请参见。若要使用密钥,必须将持久性库添加为依赖项,然后导入Database.Persist.Class-Key。。从persistent导入它。

您能显示Dao的导出列表吗?
*Dao> :i RedirectMappingRKey
newtype instance persistent-2.9.2:Database.Persist.Class.PersistEntity.Key
                   RedirectMappingR
  = RedirectMappingRKey {...}