3

我需要执行Shellycp_r库中的函数以复制到.ab

然而,

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

我如何使用StringFilePath在我知道的任何平台上定义为字符串)作为参数cp_r

注意:这个问题故意不显示任何研究工作,因为它是问答式回答的。

4

2 回答 2

2

我同意@Uli Kohler - 这是这种用法的一个例子:

https://github.com/haroldcarr/make-mp3-copies/blob/master/MakeMP3Copies.hs

于 2014-02-12T07:04:32.997 回答
1

有关详细和官方的描述,请参阅Hackage 上的Text 和 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")

请注意,如果您还需要在模块中使用FilePathfrom Prelude,则需要使用

import Shelly hiding (FilePath)

以避免冲突(或者,您可以使用Prelude.FilePathand Shelly.FilePath)。

于 2014-02-11T23:55:04.857 回答