[英]Is there a family of Haskell functions for sequencing tuples of applicatives?
是否有一个标准的 function 或函数族,用于对应用元组进行排序,作为sequenceA
的概括? 像下面这样,除了所有合理的元组长度:
sequence3TupleA :: Applicative f => (f a1, f a2, f a3) -> f (a1, a2, a3)
我相信这应该可以实现(它是为我正在使用的应用程序准备的)。
我从Data.Tuple.Sequence
中找到了SequenceT
,但它似乎需要一个 monad,而且它似乎实际上并不包含序列 function(我可能以某种方式误读了文档)。
元组在 Haskell 中有点“痛苦”,因为类型不是递归的,生成函数需要为所有元组实现它。 有人提议,例如(a, b, c)
是(a, (b, c))
的语法糖,并且只有二元组真正存在,或者至少从类型系统的角度来看是这样。 这在某种程度上是HList
正在做的事情。
然而, @Ismor描述的模式可以通过模板 Haskell 实现。我发现这个问题非常有趣,并为tuple-append
package实现了这个:它定义了一个类型类SequenceTuple
,它实现了一个sequenceTupleA
和sequenceTupleA_
,它实现了这些元组的长度62,因为这是元组中元素数量的 GHC 上限,尽管很可能永远不需要使用这么大的元组。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.