为什么我在Haskell中的代码在命令行上工作,而不在文件中工作

Tas*_*ode 0 haskell ghci

我有以下代码在命令行上运行良好:

ghci> [let square x = x * x in (square 5, square 3, square 2)]
[(25,9,4)]
Run Code Online (Sandbox Code Playgroud)

但是当我把它放在一个文件中并编译它时,它不起作用我得到一个错误:

[1 of 1] Compiling Main             ( baby.hs, interpreted )

baby.hs:62:1:
    Parse error: naked expression at top level
    Perhaps you intended to use TemplateHaskell
Failed, modules loaded: none.
Run Code Online (Sandbox Code Playgroud)

Tho*_*son 6

REPL GHCi接受Haskell表达式.与Python不同,Haskell模块必须由声明组成.

例如,表达式可能是,1+1但即使从人类的角度来看,作为源文件的顶层也没有意义 - 没有声明变量并且没有执行任何操作.在顶层,您可以声明一个值,例如:

val = [let square x = x * x in (square 5, square 3, square 2)]
Run Code Online (Sandbox Code Playgroud)

或者在REPL中你也可以这样做,但是let:

let val = [let square x = x * x in (square 5, square 3, square 2)]
Run Code Online (Sandbox Code Playgroud)