首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Haskell Shelly示例代码

Haskell Shelly示例代码
EN

Stack Overflow用户
提问于 2013-08-12 21:13:51
回答 1查看 1.3K关注 0票数 1

我正在尝试弄清楚如何使用Shelly (Shell.Pipe)库。到目前为止,我得到了:

代码语言:javascript
复制
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE ExtendedDefaultRules #-}
{-# OPTIONS_GHC -fno-warn-type-defaults #-}
import Control.Applicative
import Data.List(sort)

import Shelly.Pipe
import Data.Text.Lazy as LT

default (LT.Text)

findExt ext = findWhen (pure . hasExt ext)
main = shelly $ verbosely $ do
cd bookPath 
findExt "epub" "."

我可以找到所有的epub文件,但是我不知道如何操作每个epub文件?例如,我想对那些由Sh Monad包装的文件名运行ebook-convert命令。

顺便说一下:这些例子在互联网上真的很稀少……令人困惑的是,有两个相似的libries:Shelly和Shelly.Pipe。这两个函数的名称相同,类型不同:在Shelly.Pipe中:

代码语言:javascript
复制
find :: FilePath -> Sh FilePath
find = sh1s S.find

在“雪莱”中:

代码语言:javascript
复制
find :: FilePath -> ShIO [FilePath]

真的很令人沮丧!

PS:在John Wiegley的帮助下,我终于让代码正常工作了。我将下面的代码发布给可能使用它的人。注意unpack的使用。

代码语言:javascript
复制
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE ExtendedDefaultRules #-}
{-# OPTIONS_GHC -fno-warn-type-defaults #-}

import Control.Applicative
import Data.List(sort)
import Control.Monad
import Shelly
import System.Directory
import Data.Text
import System.FilePath
default (Text)


bookPath = "/dir/to/books"

main = shelly $ verbosely $ do
    fnames <- Shelly.find bookPath  --fnames can not be processed by normal pure String processing functions and need to be "escaped"
    forM_ fnames $ \n-> liftIO $ putStrLn $ ProcessBookFileName $ unpack $ toTextIgnore n --ProcessBookFileName::String->String
EN

回答 1

Stack Overflow用户

发布于 2013-08-12 21:53:12

据我所知,您不想使用Shelly.Pipe模块,只想使用Shelly模块。ShIO monad实现了MonadIO,它允许您在ShIO中执行任意IO操作。这会让你做一些像这样的事情

代码语言:javascript
复制
convertEpub :: FilePath -> IO ()
convertEpub fname = undefined

main = shelly $ do
    cd "projects/haskell/testing"
    liftIO $ putStrLn "Hello, world!  I'm in Shelly"
    fnames <- find (pure . hasExt "hs") "."
    liftIO $ forM_ fnames $ \fname -> do
        putStrLn $ "Processing file " ++ show fname
        convertEpub fname
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18187944

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档