KAc*_*ion 10 sorting io haskell
如何使用IO比较功能对列表进行排序?
sortWith :: [String] -> (String -> String -> IO Ordering) -> IO [String]
Run Code Online (Sandbox Code Playgroud)
Sortby期待(a->a->Ordering),我不知道,如何处理它.我懒得自己快速排序.
sdc*_*vvc 15
我担心没有简单的方法.如果有可能举起
sortBy :: Ord a => (a -> a -> Ordering) -> [a] -> [a]
Run Code Online (Sandbox Code Playgroud)
至
sortByM :: (Ord a, Monad m) => (a -> a -> m Ordering) -> [a] -> m [a]
Run Code Online (Sandbox Code Playgroud)
您可以看到执行中的比较顺序sortBy,违反参照透明度.
一般来说,这很容易xxxM,xxx但不是相反.
可能的选择:
unsafePerformIO一劈切换到按键排序并使用Schwartzian变换
sortOnM :: (Monad m, Ord k) => (a -> m k) -> [a] -> m [a]
sortOnM f xs = liftM (map fst . sortBy (comparing snd)) $
mapM (\x -> liftM (x,) (f x)) xs
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
1357 次 |
| 最近记录: |