在Haskell中,我经常有一个函数f,它接受一个列表并返回一个相等长度的列表:
f :: [a] -> [a] -- length f(xs) == length xs
Run Code Online (Sandbox Code Playgroud)
同样,我可能有一个函数g,它接受两个长度相等的列表:
g :: [a] -> [a] -> ...
Run Code Online (Sandbox Code Playgroud)
如果f和g上面键入,则如果不满足与长度相关的约束,则可能导致运行时错误.因此,我想在类型系统中编码这些约束.我怎么能这样做?
请注意,我正在寻找可在日常情况下使用的实用框架,尽可能减少对代码的直观开销.我特别想知道你将如何f与g自己打交道; 也就是说,您是否会尝试将与长度相关的约束添加到其类型中,如此处所述,或者为了简化代码,您是否会使用上面给出的类型?