Я пытаюсь выяснить, как использовать библиотеку Shelly (Shell.Pipe). До сих пор я получил:Haskell Shelly пример кода
{-# 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? Например, я хочу запустить команду ebook-convert для этих имен файлов, завернутых Sh Monad.
Btw: Примеры действительно скудны в Интернете ... И очень сбивает с толку, что есть две похожие лимии: Shelly и Shelly.Pipe. Функции внутри этих двух акций тем же именем с разными типами: В Shelly.Pipe:
find :: FilePath -> Sh FilePath
find = sh1s S.find
В Shelly:
find :: FilePath -> ShIO [FilePath]
Действительно расстраивает!
PS: С помощью John Wiegley У меня наконец-то появился код. Опубликуйте приведенный ниже код для людей, которые могут его использовать. Обратите внимание на использование распаковки.
{-# 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
Я знаю, что я новичок, но мне действительно сложно разобраться в исходном коде, чтобы узнать, как использовать эту простую функцию. Я хочу, чтобы люди могли написать еще несколько примеров, когда они пишут libries. Сам Haskell уже получил плохую репутацию за то, что он был трудным (хотя ALL haskellers утверждают, что это легко) – osager
Вы видите этот урок? http://www.linux-magazin.de/Online-Artikel/Shell-scripting-with-type-safety-using-Haskell/ Он был связан с файлом readme Shelly. – firefrorefiddle
@MikeHartl сделал. Это не очень помогает, и, честно говоря, я думаю, что это шутка, которая учит людей писать сценарий в Haskell без предварительного знания Monad. – osager