广义元组减少

sig*_*ami 3 haskell

如何编写将n元组减少为(nm)-tuple的函数?

例如,我有(a, b, c, d, e)并且想要得到(a, b, c) 哪个像

let ntup  = (1, "a", "b", 5, "c")
    nmtup = reduce ntup 3 
Run Code Online (Sandbox Code Playgroud)

Ric*_* T. 17

似乎有一些类似问题的解决方案(例如,操纵"任意"元组),但我强烈建议你考虑改变数据类型,因为元组并不意味着在诸如此类的上下文中使用.元组不是以某种方式迭代元素,而是模式匹配(固定数量)它们.替代方案可以是HList数据类型,如我链接到您的问题的答案之一中所述.

  • 好吧,只是当你留下对,你需要建立简洁的管道等是`fst`,`snd`和箭头组合器`first`,`second`,`&&&`和`***`.当您允许更大的元组时,帮助器的数量会以二次方式增长(如果不是指数级),否则您需要多态签名,这会使类型推断过于复杂.你可以使用镜头(`_1`,`_2`),但很快就会变得混乱.无论你是否使用镜头,命名记录字段都更清晰._如果你使用更大的元组,那么`((a,b),c)`实际上往往比`(a,b,c)`更方便! (4认同)
  • 实际上,可以指出,根本不应该只使用2元组,更大的内容应该是记录或列表(具有变体类型或异构). (3认同)