[英]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.