我试图在Haskell中编写关系问题,当时我必须发现以类型安全的方式执行此操作远非显而易见。例如。谦虚
select 1,a,b, from T
已经提出了许多问题:
1,a,b
的类型是什么?一般来说投影的类型是什么?我相信即使是Oracle的PL / SQL语言也没有这么做。虽然invald投影主要在编译时检测到,但是大量的类型错误仅在运行时显示。大多数其他绑定到RDBMS(例如Java的jdbc和perl的DBI)使用字符串中包含的SQL,因此完全放弃了类型安全。
进一步的研究表明,有一些Haskell库(HList,vinyl和TRex),它们提供了类型安全的可扩展记录等等。但是这些库都需要Haskell扩展,如 DataKinds , FlexibleContexts 等等。此外,这些库不易使用,并且有一种诡计的气味,至少对于像我这样的未初始化的观察者来说。
这表明,类型安全的关系操作不能很好地适应功能范例,至少不像在Haskell中实现的那样。
我的问题如下: