将 runhaskell 与命令行参数一起使用
Using `runhaskell` with command-line arguments
我有一个名为 "test.txt"
的文件,其中包含以下文本:
Good
Morning
Sir
和一个名为 "test.hs"
的文件,代码如下:
module Main where
import System.IO
main :: IO ()
main = interact f
f :: String -> String
f s = head $ lines s
以下命令...
cat test.txt | runhaskell test.hs
产出
Good
但是,我想在不依赖文件的情况下将参数显式传递给 runhaskell
,例如:
echo "Good\nMorning\nSir" | runhaskell test.hs
并使用 Haskell 代码的文字字符串执行 runhaskell
,例如:
echo "Good\nMorning\nSir" | runhaskell "module Main where\nimport System.IO\nmain :: IO ()\nmain = interact f\nf :: String -> String\nf s = head $ lines s"
这在技术上可行吗?
问题是 echo 将输出反斜杠 (\
) 和 n
而不是新行。
您可以使用 -e
flag [unix.com],此标志将:
-e
enable interpretation of backslash escapes
所以我们可以将带有新行的字符串传递到 runhaskell
的输入通道:
echo <strong>-e</strong> -- "Good\nMorning\nSir" | runhaskell test.hs
注意cat test.txt | runhaskell test.hs
是useless use of cat
,您可以将其替换为:
runhaskell test.hs <strong>< test.txt</strong>
效率更高,因为我们不使用 cat
进程或管道来传递数据。
我有一个名为 "test.txt"
的文件,其中包含以下文本:
Good
Morning
Sir
和一个名为 "test.hs"
的文件,代码如下:
module Main where
import System.IO
main :: IO ()
main = interact f
f :: String -> String
f s = head $ lines s
以下命令...
cat test.txt | runhaskell test.hs
产出
Good
但是,我想在不依赖文件的情况下将参数显式传递给 runhaskell
,例如:
echo "Good\nMorning\nSir" | runhaskell test.hs
并使用 Haskell 代码的文字字符串执行 runhaskell
,例如:
echo "Good\nMorning\nSir" | runhaskell "module Main where\nimport System.IO\nmain :: IO ()\nmain = interact f\nf :: String -> String\nf s = head $ lines s"
这在技术上可行吗?
问题是 echo 将输出反斜杠 (\
) 和 n
而不是新行。
您可以使用 -e
flag [unix.com],此标志将:
-e
enable interpretation of backslash escapes
所以我们可以将带有新行的字符串传递到 runhaskell
的输入通道:
echo <strong>-e</strong> -- "Good\nMorning\nSir" | runhaskell test.hs
注意cat test.txt | runhaskell test.hs
是useless use of cat
,您可以将其替换为:
runhaskell test.hs <strong>< test.txt</strong>
效率更高,因为我们不使用 cat
进程或管道来传递数据。