如何在Haskell中编写最佳写入类型签名,最好地封装了一个函数必须通过所有元素X传递任意长度的元组的想法,以及包含所有元素Y的元组列表(相同长度) ?
如果通过的类型是真实的"我不介意。 tuple一些备用数据类型,只要我可以在编译时强制执行元组和元组列表具有相同的长度。
Tuple N X -> [Tuple N Y] -> Z
答案 0 :(得分:4)
正如zoran119所暗示的那样,长度索引向量是执行此操作的经典方法。
{-# LANGUAGE GADTs, DataKinds #-}
data Nat = Z | S Nat
data Vec n a where
Nil :: Vec 'Z a
Cons :: a -> Vec n a -> Vec ('S n) a
现在你可以轻松编写
f :: Vec n X -> [Vec n Y] -> Z