要了解一点Turtle
,我认为修改教程中的示例会很好。我选择从输出的每一行中删除多余的“FilePath”,认为这将是一个简单的练习。
然而,尽管作者努力使他的库易于使用,但我几乎没能用它来解决这个简单的问题。
我尝试了所有我看到的看起来可以让我以某种方式>>=
从: , ,提升IO
的方法,但没有成功。我变得沮丧,只有通过阅读源代码,我才能找到似乎有效的东西(我想到了“没有明显的缺陷”)。Shell
MonadIO
FoldM
liftIO
_foldIO
Turtle
为什么这么难?使用该库的 API 如何从逻辑上得出解决方案?
#!/usr/bin/env stack
-- stack --resolver lts-8.17 --install-ghc runghc --package turtle --package lens
{-# LANGUAGE OverloadedStrings #-}
import Turtle
import Control.Lens
import Control.Foldl as Foldl
import Filesystem.Path.CurrentOS
import Data.Text.IO as T
import Data.Text as T
main = do
homedir <- home
let paths = lstree $ homedir </> "projects"
let t = fmap (Control.Lens.view _Right . toText) paths
customView t
customView s = sh (do
x <- s
liftIO $ T.putStrLn x)