[英]Is it possible to pipe source code to GHC through standard input?
我的意思是这样的:
echo 'main = print 1' | ghc > executable
GHC 回复的对象: ghc: no input files
我错过了什么吗? 这有可能吗?
据我所知,答案是否定的。 我的尝试:
$ echo 'main = print 1' | ghc ghc: no input files
$ echo 'main = print 1' | ghc - ghc: unrecognised flag: -
$ echo 'main = print 1' | ghc /dev/stdin target '/dev/stdin' is not a module name or a source file
$ ln -s /dev/stdin stdin.hs; echo 'main = print 1' | ghc stdin.hs stdin.hs: hFileSize: inappropriate type (not a regular file)
问题:ghc使用.hs
, .lhs
或.o
等后缀来决定如何处理文件(这就是#3失败的原因)。 即使你讨厌它(#4),ghc真的想要stat()
文件来获取它的大小,这在管道上失败了。
尽管通过正常的进程替换是不可能的,但是zsh提供了一种特殊的类似进程替换的行为 ,它允许“文件”比传统的进程替换更像是一个真正的文件(通过创建一个实际的临时文件) :
% ghc -o Main -x hs =( echo 'main = print 1' )
[1 of 1] Compiling Main ( /tmp/zshjlS99o, /tmp/zshjlS99o.o )
Linking Main ...
% ./Main
1
%
-x hs
选项告诉ghc
表示文件名以.hs
结尾。
总的来说,这实际上是手动创建和删除临时文件的捷径。
我不确定是否有其他炮弹支持这种事情。 至少我认为bash没有。
通常ghc用作编译器,您可以在文件上运行它(ghc可以在其上查找和推断结尾类型等)并将输出文件指定为标志。
但是,您当然可以使用
filename=$(mktemp --suffix=.hs)
echo "main = print 1" >> $filename
ghc -o executable $filename
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.