我想将字符串“Hello World”传递给以下 Haskell 脚本:
main :: IO ()
main = interact id
位于 Heredoc 内。这可能吗?
我做了一个最小的可复制示例(目前不起作用):
#!/bin/bash
echo "Hello World" | runhaskell <<HASKELL_END 2>/dev/null
main :: IO ()
main = interact id
你用zsh没问题就可以了
#!/bin/zsh
echo "Hello World" | runghc =(cat <<'HASKELL_END'
main :: IO ()
main = interact id
HASKELL_END
)
或
#!/bin/zsh
echo "Hello World" | runghc =(<<<'
main :: IO ()
main = interact id'
)
问题是,您需要将源代码作为文件传递,因为
interact
关闭标准输入。不幸的是,bash 中的进程替换效果不佳,因为 ghc 试图获取命名管道的大小。
所以这行不通。
#!/bin/bash
echo "Hello World" | runghc <(cat <<HASKELL_END
main :: IO ()
main = interact id
HASKELL_END
)
它给出了这个错误。
*** Exception: /dev/fd/63: hFileSize: inappropriate type (not a regular file)