Haskell堆栈命令行标志,用于执行表达式

时间:2018-11-25 18:57:35

标签: haskell haskell-stack

如果我有一个简单的Haskell单线版,ghc或ghci中的标志可以从命令行执行此操作吗?

我正在寻找类似的东西

stack ghci -e 'putStrLn "hello world"'

类似于

$ R --quiet -e "cat('hello world')"
> cat('hello world')
hello world> 

$ python -c "print('hello world')"
hello world

编辑“ ghci -e”调试

(此问题已经得到了一个很好的答案,但是只需调试该标志似乎应该/应该/可以在上面工作...)

奇怪的是,似乎没有得到支持的ghci -e为我工作。测试它不仅是我的机器,我也在Ubuntu上运行了它,并遇到了同样的问题:

FROM ubuntu:18.04
ENV DEBIAN_FRONTEND=noninteractive

RUN apt-get update \
 && apt-get install  --yes curl \   
 && curl -sSL https://get.haskellstack.org/ | sh \
 && export HOME=/root/.local/bin:$HOME \
 && stack ghci -e 'putStrLn "hello world"'

然后

$ docker build .

已生产...

Stack has been installed to: /usr/local/bin/stack

WARNING: '/root/.local/bin' is not on your PATH.
    For best results, please add it to the beginning of PATH in your profile.

Invalid option `-e'

Usage: stack ghci [TARGET/FILE] [--ghci-options OPTIONS] [--ghc-options OPTIONS]
                  [--flag PACKAGE:[-]FLAG] [--with-ghc GHC] [--[no-]load]
                  [--package ARG] [--main-is TARGET] [--load-local-deps]
                  [--[no-]package-hiding] [--only-main] [--trace] [--profile]
                  [--no-strip] [--[no-]test] [--[no-]bench] [--help]
  Run ghci in the context of package(s) (experimental)
The command '/bin/sh -c apt-get update  && apt-get install  --yes curl  && curl -sSL https://get.haskellstack.org/ | sh  && export HOME=/root/.local/bin:$HOME  && stack ghci -e 'putStrLn "hello world"'' returned a non-zero code: 1

2 个答案:

答案 0 :(得分:6)

如果您一次选中$ stack --help,您会看到

eval                     Evaluate some haskell code inline. Shortcut for
                         'stack exec ghc -- -e CODE'

所以不要那样做

$ stack exec ghc -- -e 'putStrLn "hello world"'
hello world

您可能会喜欢

$ stack eval 'putStrLn "hello world"'
hello world

答案 1 :(得分:2)

实际上您已经有了这个flag:就是这样:

-e expr
     

评估expr;有关详细信息,请参见eval-mode

所以您可以这样写:

ghci -e 'putStrLn "hello world"'

实际上,如果您使用stack ghci,则只需使用应用程序打开ghci,但是-e标志不是“特定于堆栈”的。

例如:

$ ghci -e 'putStrLn "hello world"'
hello world