簡體   English   中英

是否有一系列 Haskell 函數用於對應用元組進行排序?

[英]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(我可能以某種方式誤讀了文檔)。

tuple package 中的SequenceT類型類及其方法sequenceT確實可以滿足您的需求。 不幸的是,這個 package 似乎自 2014 年以來就被放棄了,在Applicative類型類被引入之前,所以只適用於Monad實例。 對此進行排序的問題自 2017 年以來一直未解決,相關的拉取請求已被貢獻者關閉。

正如@lsmor 在評論中提到的,這個 function 並不難,它的定義是:

sequence3TupleA (a, b, c) = (,,) <$> a <*> b <*> c

元組在 Haskell 中有點“痛苦”,因為類型不是遞歸的,生成函數需要為所有元組實現它。 有人提議,例如(a, b, c)(a, (b, c))語法糖,並且只有二元組真正存在,或者至少從類型系統的角度來看是這樣。 這在某種程度上是HList正在做的事情。

然而, @Ismor描述的模式可以通過模板 Haskell 實現。我發現這個問題非常有趣,並為tuple-append package實現了這個:它定義了一個類型類SequenceTuple ,它實現了一個sequenceTupleAsequenceTupleA_ ,它實現了這些元組的長度62,因為這是元組中元素數量的 GHC 上限,盡管很可能永遠不需要使用這么大的元組。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM