haskell - 我该如何使用排序?

标签 haskell haskell-turtle

在 Haskell Turtle 中,排序的类型为 (Functor io, MonadIO io, Ord a) => Shell a -> io [a]。它采用 Shell monad 形式的流,将其排序到列表中,然后将其包装在 MonadIO???

这对我来说似乎违反直觉。我的初学者认为,MonadIO 应该只在与外界交互时使用,而 sort 不需要这样做。

我希望 sort(Ord a) => Shell a -> Shell a,这样它就可以很好地融入流中。

这是包作者的疏忽,还是我不理解应该如何使用 sort

最佳答案

MonadIO io => io [a]Shell a 更好,因为 Shell 是一个 MonadIO实例和 select 将列表提升到 Shell。因此,如果您愿意,您可以编写自己的更具体的 sort ,它具有您喜欢的类型,并使用海龟提供的 sort 实现:

sortStream :: Ord a => Shell a -> Shell a
sortStream = sort >=> select

关于haskell - 我该如何使用排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72525754/

相关文章:

multithreading - 纯函数式数据结构总是无锁的吗?

haskell - 如何使用 List 进行回溯和 IO?

haskell - Turtle 中的二进制重定向

haskell - 启动程序(例如 : Vim) from Haskell

haskell - 没有尾随换行符的 Turtle : Prompting for input,

Haskell:Turtle:命令行解析器

parsing - Haskell Parsec 组合器 'many' 应用于接受空字符串的解析器

Haskell::如何创建任意长度的向量?

opengl - 这个 OpenGL Haskell 代码是如何工作的?