如何将脚本加载到ghci?

and*_*soa 8 haskell

我刚刚开始学习Haskell,并且很难理解Haskell程序的"流程".

例如在Python中,我可以编写一个脚本,将其加载到解释器并查看结果:

def cube(x):
    return x*x*x

print cube(1)
print cube(2)
print cube(cube(5))
# etc... 
Run Code Online (Sandbox Code Playgroud)

在Haskell中,我可以这样做:

cube x = x*x*x
main = print (cube 5)
Run Code Online (Sandbox Code Playgroud)

加载它,runhaskell它将打印125.
或者我可以使用ghci并手动输入我想要测试的所有功能

但我想要的是使用我的文本编辑器,编写几个函数,一些测试,并让Haskell打印出一些结果:

-- Compile this part
cube x = x*x*x

-- evaluate this part:
cube 1
cube 2
cube (cube 3)
--etc.. 
Run Code Online (Sandbox Code Playgroud)

这样的事情可能吗?

Dan*_*ons 14

很可能!

$ ghci
> :l filename.hs
Run Code Online (Sandbox Code Playgroud)

这将加载文件,然后您可以直接使用这些功能.

> :r
Run Code Online (Sandbox Code Playgroud)

这将导致在您进行编辑后重新加载文件.无需提及该文件,它将重新加载您加载的最后一个文件.如果你ghci filename.hs最初做的话,这也会有效:l.


uli*_*tko 8

cube x = x*x*x

main = do
    print $ cube 1
    print $ cube 2
    print $ cube (cube 3)
Run Code Online (Sandbox Code Playgroud)
$ ghci cube.hs
...
ghci> main
Run Code Online (Sandbox Code Playgroud)

请参阅GHCI用户指南.


我还强烈建议您查看QuickCheck库.

你会惊讶于它的测试结果如何令人惊叹.

  • 如果你的ghci已经在运行,你也可以使用:l(或:load),通常是我的. (7认同)
  • @andsoa:Main只是一个普通值,所以你只需在GHCi提示符下键入`main`即可.您也可以使用`:main`来运行`main`,并且可以通过以下方式传递命令行参数:`:main arg1 ... argN`.设置命令行参数的另一种方法是使用`:set args arg1 ... argN`.有关更多信息,请参阅[GHC手册第2.7节](http://www.haskell.org/ghc/docs/7.4.2/html/users_guide/ghci-commands.html). (2认同)