【问题标题】:Persistent model types in Fay codeFay 代码中的持久模型类型
【发布时间】:2013-03-29 17:34:43
【问题描述】:

我正在使用 Yesod 脚手架站点(yesod 1.1.9.2),昨天花了几个小时来了解 Fay 和 Yesod 的基本用法。我想我现在了解了使用 Fay 向页面添加大量 AJAX 功能的预期工作流程(在这里我会有点迂腐,因为其他人可能会觉得逐步进行有帮助):

  • 将数据构造函数Example a 添加到SharedTypes.Command
  • Handler.Fay.onCommand 中的表达式case readFromFay Command of ... 中,添加与我的新数据构造函数匹配的大小写。
  • 在 /fay 中创建一个 Fay 文件“Example.hs”,以 fay/Home.hs 为模板。在这里的某个地方,使用表达式call (Example "foo") $ myFayCallback
  • 为将使用我生成的 Javascript 的页面定义路由和处理程序。在处理程序中,使用$(fayFile' (ConE 'ScriptR) "Example.hs")

我的问题:在当前的 Yesod/Fay 架构中,我应该如何与我的 Fay 代码共享我的 Persistent 模型类型?

在 Fay 文件中使用 import Model 不起作用 - 当我尝试加载使用此 Fay 文件的页面时,我在浏览器中收到错误(我猜是 Fay 提醒我错误的标准方式)表示它找不到模块“模型”,但它只搜索了以下目录:

  • projectroot/cabal-dev//share/fay-0.14.2.0/src
  • projectroot/cabal-dev/share/fay-base-0.14.2.0/src
  • projectroot/cabal-dev/share/fay-base-0.14.2.0
  • projectroot/fay
  • projectroot/fay-shared

我也尝试在 SharedTypes.hs 中导入和重新导出模型,但产生了同样的错误。

有没有办法做到这一点?如果不是,为什么不呢? (我是 Haskell 和 Yesod 的相对菜鸟,所以回答“为什么不呢?”这个问题真的很有帮助。)

编辑:

我刚刚意识到在这个问题的标题中提到 Persistent 可能会产生误导。为了更清楚我想要做什么:我只想能够使用 Yesod 为我的模型定义的相同数据类型在我的 Fay 代码中表示数据。例如。如果我因此在 config/models 中定义模型...

Foo
    bar BarId
    textThatCanBeNull Text Maybe
    deriving Show

...我希望能够定义一个接收和/或返回Foo 类型值的 AJAX“命令”,并让我的 Fay 代码在 Foos 中处理,而无需我编写任何 de/序列化代码。我知道我将无法直接从我的 Fay 代码中使用 Persistent 的任何查询功能;我只在标题中提到了 Persistent,因为我将 Model.hs 和 config/models 中的所有内容都与 Persistent 联系在一起。

【问题讨论】:

    标签: haskell yesod fay


    【解决方案1】:

    目前不支持; Persistent 利用了许多 Fay 不支持的功能(例如 Template Haskell)。目前,拥有一个由 Fay 和 Yesod 共享的中间数据类型并将您的 Persistent 数据转换为/从该类型转换可能是有意义的。

    【讨论】:

    • 无赖,但感谢您的回答!你认为 Fay 是否有可能在不久的将来(比如 6-12 个月)进行扩展,以支持相关的 Haskell 功能?和/或您是否有任何计划调整 Persistent 以便我们的模型类型(甚至是 Persistent 为每个模型生成的许多类型的一些有用子集)可以在 Fay 代码中使用,尽管 Fay 的语言功能支持有限?我注意到'postgres-fay' 现在是yesod init 脚本中的一个选项;看来你一定是在做某事……还是我误解了?
    • 计划让 Yesod+Fay 的使用更容易,但在这个特定方向上没有任何进展。我实际上在 fpcomplete.com 中广泛使用 Fay,但主要遵循我在这里给出的建议。它实际上在大多数情况下都非常有效,因为模型中通常会有一些您不希望客户端访问的数据。
    • 我同意@MichaelSnoyman 的观点,单独的类型通常是有意义的。当然,如果能够共享这些类型以加快原型制作,那将是一件好事。我们目前正在考虑将 Fay 迁移到完整的 haskell-suite 或 GHC API。在这一点上,我们已经尽可能多地使用了 haskell-src-exts。如果我们选择 Haskell 套件,这将取决于它们何时准备好发布,我将在本周末与 Roman 讨论他们的进展。不管怎样,我不确定是否可以只使用 Fay 中的持久模型,我们稍后再讨论!
    • 谢谢亚当。对这个方向有额外的洞察力感觉非常有帮助。
    猜你喜欢
    • 1970-01-01
    • 2012-03-03
    • 1970-01-01
    • 2015-03-17
    • 1970-01-01
    • 1970-01-01
    • 2012-12-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多