首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有一个Haskell函数家族用于对应用程序的元组进行排序吗?

有一个Haskell函数家族用于对应用程序的元组进行排序吗?
EN

Stack Overflow用户
提问于 2022-11-22 06:59:39
回答 2查看 85关注 0票数 2

对于应用程序的序列元组,是否有一个标准函数或一系列函数,作为sequenceA的一个推广?如下所示,除了所有合理的元组长度之外:

代码语言:javascript
复制
sequence3TupleA :: Applicative f => (f a1, f a2, f a3) -> f (a1, a2, a3)

我认为这应该是有可能实现的(这是为我正在工作的应用程序)。

我从SequenceT中找到了Data.Tuple.Sequence,但它似乎需要一个单块,而且它似乎实际上并不包含序列函数(我可能以某种方式误读了文档)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-11-22 15:23:44

SequenceT类型集及其来自tuple包的方法sequenceT确实完成了您想要的任务。不幸的是,这个包似乎从2014年起就被放弃了,在引入Applicative类型之前,所以只适用于Monad实例。对此进行排序的问题自2017年以来一直处于开放状态,相关的拉请求被贡献者关闭。

正如@lsmor在评论中提到的,这个函数并不难,它的定义是:

代码语言:javascript
复制
sequence3TupleA (a, b, c) = (,,) <$> a <*> b <*> c
票数 2
EN

Stack Overflow用户

发布于 2022-11-26 13:54:21

在Haskell中,元组有点“痛苦”,因为类型不是递归的,生成函数需要为所有元组实现这一点。例如,有人建议(a, b, c)(a, (b, c))的语法糖,并且只有两个元组确实存在,或者至少从类型系统的角度来看是这样。这在某种程度上是HList正在做的事情。

然而,@Ismor描述的模式可以通过模板Haskell实现。我发现这个问题非常有趣,并在套餐中实现了这个问题:它定义了一个类型类型SequenceTuple,它实现了一个sequenceTupleA,而sequenceTupleA_实现了长度为62的元组,因为这是GHC对于一个元组中的元素数的上限,尽管很可能没有必要使用这么大的元组。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74528578

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档