【问题标题】:Haskell data structures for DB backed application数据库支持应用程序的 Haskell 数据结构
【发布时间】:2011-04-23 15:30:22
【问题描述】:

这是我第一个使用 Haskell 的程序。我写它是为了将我读到的关于 FP 的所有内容付诸实践。我要弄清楚的第一件事是如何对要从数据库中提取的数据进行建模(最终我也会写入数据库)。我从我的users 表开始写了这样的内容

module Model (User) where

class Audited a where  
  creationDate :: a -> Integer
  lastUpdatedDate :: a -> Integer
  creationUser :: a -> User
  lastUpdatedUser :: a -> User

class Identified a where
  id :: a -> Integer

data User = User {userId :: Integer}

instance Identified User where
  id u = userId u

module Main (main) where
import Model (User)

data Point = Pt {pointx, pointy :: Float}

instance Show Point where
  show (Pt x y) = "(" ++ show x ++ ", " ++ show y ++ ")"

main :: IO ()
main = do 
  print $ Pt 1 2

Point 只是我在测试...这是我的第一个 Haskell 代码)

这段代码无法编译,但我还不是很担心——重要的是让我的类型设置好。

这是我的问题列表

  • 在 Haskell 中对基于记录的数据建模的最佳方法是什么?
  • 我的大多数表都有审计信息和不透明的 ID。如何使用 Haskell 类型系统利用这一点?您可以看到我创建了 Audited 和 Identified 类。这是一个好方法吗?
  • 这对于 Haskell 来说甚至是一个很好的应用程序吗?我正在考虑使用 Clojure,因为它可以与 Java 互操作(这个应用程序目前是用 Java 编写的)。

【问题讨论】:

  • 顺便说一句,定义函数id 不是一个好主意。通常,id 是定义为id x = x 的恒等函数,因此非常重要。
  • 你好。我看到您正在使用带有 DB 的 Haskell,以及 Scala 中的代码。你能看看我的问题吗?当您拥有像我们通常在 FP 中那样做的不可变对象时,如何处理数据库?您是否使用可变类进行数据访问? stackoverflow.com/questions/12882099/…

标签: data-structures haskell types


【解决方案1】:

对基于记录的数据建模的最佳方法是什么?

作为可能具有 (Haskell) 记录组件的代数数据类型。

简单示例:the JSValue data type,表示 JSON 记录。

如何利用 Haskell 类型系统?

通过类型类在 Haskell 中的接口是一种有效的方法,尽管使用 newtype 或其他数据类型,并且不导出其构造函数提供了同样强大的抽象属性。与使用存在类型广义代数数据类型 (GADT)一样。

示例:查看例如newtype 如何使用 in this example

示例:newtype 用于向 PCRE 库添加类型安全和抽象。

这对于 Haskell 来说还是一个很好的应用程序吗?

看起来完美无瑕。强大的类型、强大的 FFI 和大量 libraries on Hackage 提供帮助意味着您拥有大量技术来帮助完成工作。

示例:Haskell 的数据库访问器库有很多很多,例如:

还有可敬的hdbc,也就是also documented in RWH

还有 magically persistening Haskell data 的高级软件包。

所以有很多选择,还有很多可供入门的示例。

【讨论】:

  • 感谢您的回答。我是一个 Haskell nube。如果你能举几个简短的例子来说明你在说什么,那就太好了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多