如何使用Haskell Turtle库打印路径?

时间:2017-07-13 23:10:21

标签: haskell haskell-turtle

要了解Turtle,我认为修改教程中的示例会很好。我选择从输出的每一行中删除reduntant“FilePath”,认为这将是一个简单的练习。

然而,尽管作者努力使他的图书馆易于使用,但我几乎没有用它来解决这个简单的问题。

我尝试了所看到的每件事,看起来它会让我以某种方式将>>=IO提升到ShellMonadIOFoldM,{{ 1}},liftIO没有成功。我变得沮丧,只有通过阅读_foldIO源代码,我才能找到似乎有效的东西(“没有明显的缺陷”浮现在脑海中)。

为什么这么难?如何使用此库的API从逻辑上获得解决方案?

Turtle

1 个答案:

答案 0 :(得分:3)

您不会将IOShell提升为ShellMonad已有>>=个实例,该实例附带了自己的IO函数。您可以使用ShellliftIO操作提升到foldM,也可以使用foldsh运行shell。如果您不关心结果,请使用Shell运行main = sh $ do homedir <- home filepath <- lstree $ homedir </> "projects" case (toText filepath) of Right path -> liftIO $ T.putStrLn x Left approx -> return () -- This shouldn't happen

我相信你的例子可以简化为

FilePath

至于从stringPath :: FilePath -> String stringPath filepath = case (toText filePath) of -- try to use the human readable version Right path -> T.unpack path Left _ -> encodeString filePath -- fall back on the machine readable one 获取字符串的困难,我不认为这可以归咎于Turtle作者。我认为它可以简化为

main = sh $ do
  homedir <- home
  filepath <- lstree $ homedir </> "projects"
  liftIO $ putStrLn (stringPath filepath)

结合这将简化示例

main = view $ do
  homedir <- home
  filepath <- lstree $ homedir </> "projects"
  return $ stringPath filepath

spark-submit