2014-02-11 3 views
2

Мне нужно выполнить функцию cp_r из библиотеки Shelly, чтобы скопировать a в b.Shelly: Convert String to Shelly FilePath

Однако

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?

Примечание: Этот вопрос намеренно не показывает никаких исследований, так как он был отвечен Q & A-Style.

ответ

1

Подробное и официальное описание см. В разделе convert between Text and FilePath раздела «Хакеры».

Давайте сначала посмотрим, как сделать это с 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).