【问题标题】:acid-state convenience wrapper without template haskell?没有模板haskell的酸状态便利包装器?
【发布时间】:2012-08-03 19:10:25
【问题描述】:

acid-state tutorial 中的所有示例都使用了 Template Haskell。不过,由于some reasons,我不是很热衷于使用它。

我知道可以在没有模板 haskell 的情况下使用酸状态,如下所示:
http://mirror.seize.it/acid-state/examples/HelloWorldNoTH.hs

但是如果有任何方便的包装器或库来帮助更容易地使用酸状态(不使用模板 haskell),我正在徘徊?

P.S.:我的目的是为 web 应用程序实现一个数据库层。

【问题讨论】:

  • 在这种情况下,TH 您正在寻找的便利包装。我通常会限制模板 Haskell 的使用(就像 Happstack 的家伙 afaik 一样),但这是 IMO 非常安全和适当的使用。
  • 就 TH 而言,只是没有预定义的语法 - 所有这些 '' 看起来很奇怪且难以阅读(随处可见神奇的大写变体)。
  • 对于 TH 的这种使用有预定义的语法。准引号是您没有预定义语法的地方,但这里没有准引号。

标签: haskell acid-state


【解决方案1】:

你不能编写一个派生实例的函数,这就是 Acid-State 使用 Template Haskell 的原因。

Acid-State 的开发者之前提到过,如果 GHC 增加了对自动派生类的支持(很像 data SomeData = Foo | Bar deriving (Show)),他们就不需要使用 TH 了

您链接的帖子中反对 TH 列出的许多观点仅适用于特定情况(例如,您可以确定 Acid-State 的 TH 功能不会发射任何导弹)

我真的不认为您应该为使用 TH 担心太多 - 它有时会有所帮助!

【讨论】:

  • 谢谢。抱歉这个愚蠢的问题,但派生类有什么作用?
  • 它会自动添加一个类的实例。在上面tazjin的例子中,这意味着你不必写instance Show SomeData where showsPrec _ Foo = showString "Foo"; showsPrec _ Bar = showString "Bar"; GHC 将自动生成该实例。如果您也可以写deriving (Acid) 或类似的东西,那就太好了。
  • 哦,我明白了。另一个愚蠢的问题:为什么不能通过语言扩展来启用它,即{-# #-} 中的那些东西
  • 实际上Generics 是可能的,但据我所知,还没有人为acid-state 制作适配器。而且使用泛型比使用 TH 慢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-11
  • 1970-01-01
  • 1970-01-01
  • 2015-02-22
  • 2014-05-07
相关资源
最近更新 更多