键入安全相等的元组大小。

时间:2016-09-22 03:08:46

标签: haskell

如何在Haskell中编写最佳写入类型签名,最好地封装了一个函数必须通过所有元素X传递任意长度的元组的想法,以及包含所有元素Y的元组列表(相同长度) ?

如果通过的类型是真实的"我不介意。 tuple一些备用数据类型,只要我可以在编译时强制执行元组和元组列表具有相同的长度。

Tuple N X -> [Tuple N Y] -> Z

1 个答案:

答案 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