在 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/