【发布时间】:2014-07-09 02:00:19
【问题描述】:
我正在构建一个从 html 表单查询数据库的工具,并且我定义了一个数据类型来捕获表单值。例如:
data BookSearchParams = BookSearchParams
{ Title :: Maybe Text
TitleSearchType :: SearchType
, Author :: Maybe Text
, AuthorSearchType :: SearchType
}
数据库的列表示为数据类型中的字段,我使用 Maybe 因为用户可能会也可能不会在表单中输入该值。 SearchType 字段用于指定完全匹配、正则表达式等。我想把它变成一个 sql select 语句。
在命令式语言中,如果字段被传递,我可以将每个字段添加到字符串中:
if params.title:
sql += params.title
在 Haskell 中,我可以用很多 case 语句来创建一个具有以下类型的函数:
bookSearchParamsToSql :: BookSearchParams -> Text
但是,这将是一个混乱的功能。这个函数应该怎么写?
【问题讨论】: