Шелли: конвертировать строку в Шелли FilePath
Мне нужно выполнить cp_r
функция из библиотеки Шелли для копирования a
в b
,
Тем не мение,
import Shelly
main = do cp_r "a" "b"
доходность
Couldn't match expected type `Shelly.FilePath'
with actual type `[Char]'
In the first argument of `cp_r', namely `"a"'
In the expression: cp_r "a" "b"
In an equation for `it': it = cp_r "a" "b"
как для первого, так и для второго аргумента cp_r
,
Как я могу использовать String
(FilePath
определяется как String на любой платформе, о которой я знаю) в качестве аргумента cp_r
?
Примечание: этот вопрос намеренно не требует каких-либо исследований, так как на него был дан ответ на вопрос "Стиль и ответ".
2 ответа
Подробное и официальное описание см. В разделе " Преобразование между текстом и FilePath " в Hackage.
Давайте сначала посмотрим, как это сделать с Text
:
{-# LANGUAGE OverloadedStrings #-}
import Shelly
cp_r (fromText "a") (fromText "b")
С этого момента мы можем просто использовать Text.pack
применить этот метод к строкам
{-# LANGUAGE OverloadedStrings #-}
import Shelly
import Data.Text
cp_r (fromText $ pack "a") (fromText $ pack "b")
Обратите внимание, что в случае, если вам также необходимо использовать FilePath
от Prelude
в модуле, вы должны использовать
import Shelly hiding (FilePath)
чтобы избежать конфликтов (в качестве альтернативы, вы можете использовать Prelude.FilePath
а также Shelly.FilePath
).
Я согласен с @Uli Kohler - вот пример такого использования:
https://github.com/haroldcarr/make-mp3-copies/blob/master/MakeMP3Copies.hs