【发布时间】:2015-02-05 06:44:50
【问题描述】:
基本上,我想要的是一个函数,它采用函数类型(a -> b -> c -> ...),并返回该函数类型的所有右子集类型的列表,例如,让我们调用这个函数 f:
x = f (a -> b -> c)
x
> [a -> b -> c, b -> c, c]
这应该适用于我的示例中的多态类型和具体的函数类型。
如果您可以在类型级别上使用如下函数类型进行模式匹配,这将相对简单:
g (x -> xs) = xs
g (x) = x
用作构造上述 f 的实用函数,函数类型上的模式匹配有点像列表上的模式匹配。
【问题讨论】:
-
你真的想要一个类型级别的函数吗?你会用它做什么?
-
好吧,老实说,一些类型级别的巫术可能无法在 Haskell 中工作,因为它缺少未标记的 sum 类型。作为最终目标,我基本上想要一种方法来从函数类型的所有可能的右子集中构造求和类型。它的效用与我尝试简化应用通用语法的部分有关。这都是非常实验性的。
-
基本上,将单词视为函数(就像在 AUG 中所做的那样),我想要一种允许或多或少规范的类型,允许 n 元函数(具有未指定修饰符的单词或短语),一个具体的短语(空函数),或任何介于两者之间的表示为部分应用的函数,所以我想要一个类型来允许所有这些情况。
-
@Sintrastes 我添加了一些可能有助于处理未标记的 sum 类型的东西。
-
虽然,我怀疑制作 EDSL 比直接操作 Haskell 函数类型要容易得多。
标签: haskell types algebraic-data-types