用于DB支持的应用程序的Haskell数据结构

时间:2011-04-23 15:30:22

标签: data-structures haskell types

这是我使用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编写)。

1 个答案:

答案 0 :(得分:9)

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

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

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

如何利用Haskell类型系统?

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

示例:查看例如如何newtype使用{{1}}。

示例:in this example用于向PCRE库添加类型安全性和抽象。

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

似乎完全是cromulent。强大的类型,强大的FFI和大量newtype帮助意味着您拥有足够的技术来帮助完成工作。

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

和尊敬的tyrant,即hdbc

also documented in RWH的高级别包。

所以有很多选择,还有很多例子可供选择。