我有一个有6种不同类型实体的模式,但它们都有很多共同点.我想我可能在类型级别抽象了很多这种共性,但我遇到了HaskellDB和重叠实例的问题.这是我开始使用的代码,工作正常:
import Database.HaskellDB
import Database.HaskellDB.DBLayout
data Revision a = Revision deriving Eq
data Book = Book
instance FieldTag (Revision a) where
fieldName _ = "rev_id"
revIdField :: Attr (Revision Book) (Revision Book)
revIdField = mkAttr undefined
branch :: Table (RecCons (Revision Book) (Expr (Revision Book)) RecNil)
branch = baseTable "branch" $ hdbMakeEntry undefined
bookRevision :: Table (RecCons (Revision Book) (Expr (Revision Book)) RecNil)
bookRevision = baseTable "book_revision" $ hdbMakeEntry undefined
masterHead :: Query (Rel (RecCons (Revision Book) (Expr (Revision Book)) …Run Code Online (Sandbox Code Playgroud) 制作一个三元逻辑表,我想为我将调用的运算符创建自己的函数<=>.
所以,例如,我想这样做,但那是不对的.这样做的正确方法是什么?
data Ternary = T | F | M
deriving (Eq, Show, Ord)
<=> :: Ternary -> Ternary -> Ternary
<=> T F = F
<=> T T = T
<=> T M = M
<=> F F = T
<=> F T = F
<=> F M = M
<=> M F = M
<=> M T = M
<=> M M = T
Run Code Online (Sandbox Code Playgroud) 假设我有以下(PostgreSQL)表定义:
CREATE TABLE books (
id serial NOT NULL,
title character varying NOT NULL,
PRIMARY KEY (id)
);
Run Code Online (Sandbox Code Playgroud)
以下记录定义:
data Book =
{ id :: Int
, title :: String
}
Run Code Online (Sandbox Code Playgroud)
查询数据库中所有书籍的"取消映射"功能的基本示例是什么allBooks :: Database -> IO [Book]?