我在函数式编程方面没有太多经验,但我已经阅读了一定数量的理论论文,我还是想构建一个新的类型系统,因为我希望实现一些改进。我想知道我想要实现的某些属性是否已经存在于Haskell和公司中。
其中一个将是以下内容:我想混合布尔运算符和/或/和类型检查器。这样,当在curried函数中对每次迭代进行类型检查时,我想根据以下布尔表达式检查它:
((is of type x) OR (is of type y)) AND NOT (is of type z)
它类似于设定代数,处理联合,交叉和补语,但是使用基本的布尔运算来实现,这些操作对表达式约束为类型。
我意识到总和和产品类型(总结一些铃声为或),但我仍然不能在不执行和的情况下绕过上面的表达式和不处于低级别,直接进入类型系统。
例如,如果我们将虚构的*
引入为,+
为或-
,则我们如何形成与语义相同的类型:
foo: ((x + y) * -z) -> w
我之前将x,y,z和w定义为一些现有类型。在这个例子中,函数foo有一个接受集合元素的参数((x union y)intersect(不是z))。
这种布尔类型检查会是新的,还是已经可以在现有的函数式语言中实现的,包括Haskell?如果可能,上面的和,或和不是如何在Haskell或其他函数式语言中实现?