Haskell 广义元组约简

Haskell 广义元组约简,haskell,Haskell,如何编写将n-tuple简化为(n-m)-tuple的函数 例如,我有(a,b,c,d,e),想得到(a,b,c) 它的用法是 let ntup = (1, "a", "b", 5, "c") nmtup = reduce ntup 3 似乎有类似的问题的解决方法(例如),但是我强烈建议你考虑改变数据类型,因为元组不是要在这样的上下文中使用。元组并不意味着以某种方式对元素进行迭代,而是对元素(固定数量)进行模式匹配。 另一种选择可能是数据类型,正如我给您链接的问题的一个答案中所提到

如何编写将n-tuple简化为(n-m)-tuple的函数

例如,我有
(a,b,c,d,e)
,想得到
(a,b,c)
它的用法是

let ntup  = (1, "a", "b", 5, "c")
    nmtup = reduce ntup 3 

似乎有类似的问题的解决方法(例如),但是我强烈建议你考虑改变数据类型,因为元组不是要在这样的上下文中使用。元组并不意味着以某种方式对元素进行迭代,而是对元素(固定数量)进行模式匹配。


另一种选择可能是数据类型,正如我给您链接的问题的一个答案中所提到的。

事实上,可以指出的是,只应该使用2元组,所有较大的数据都应该是记录或列表(具有变体类型或异构).你能给我指一些能更好地解释这句话的参考资料吗?听起来很有趣!谢谢好吧,只是当你和pairs呆在一起时,你只需要构建简洁的管道等等,就是
fst
snd
和箭头组合符
第一个
第二个
和&&
***
。当您允许较大的元组时,辅助程序的数量将以二次方式(如果不是指数方式)增长,否则您需要多态签名,这会使类型推断过于复杂。你可以使用镜头(
\u1
\u2
),但这很快就会让人困惑。无论是否使用镜头,命名记录字段都更清晰。如果使用较大的元组,那么
((a,b,c)
实际上比
(a,b,c)
更方便!谢谢搬到HList,我想在没有太多额外工作(添加新库)的情况下进行转换,但最终没有香草哈斯克尔方法。要做到这一点,您需要一些奇特的类型操纵。