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

thr*_*ups 6 haskell types data-structures

这是我使用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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

(这些Point东西只是我测试......这是我的第一个Haskell代码)

这段代码没有编译,但我还没有真正关心 - 最重要的是让我的类型设置得很好.

这是我的问题清单

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

Don*_*art 9

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

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

简单示例:JSValue数据类型,表示JSON记录.

我如何利用Haskell类型系统?

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

示例:查看例如在此示例中如何newtype使用.

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

这对Haskell来说是一个很好的应用吗?

似乎完全是cromulent.强大的类型,强大的FFI以及Hackage上的大量帮助意味着您拥有足够的技术来帮助完成工作.

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

和尊敬的hdbc,也记录在RWH中.

还有很好的高级软件包,用于神奇地持久化Haskell数据.

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