我欣赏的是有人可能指向文档是什么“让”确实在GHCI,或做不到这一点,解释令人信服:-)。
到目前为止,我所知道的,“让”(没有“中”)不是Haskell语言本身的一部分,而在另一方面,它似乎并没有成为一个GHCI命令要么,因为它不是由冒号前缀。
我欣赏的是有人可能指向文档是什么“让”确实在GHCI,或做不到这一点,解释令人信服:-)。
到目前为止,我所知道的,“让”(没有“中”)不是Haskell语言本身的一部分,而在另一方面,它似乎并没有成为一个GHCI命令要么,因为它不是由冒号前缀。
虽然在ghci中编程,你喜欢与IO单子编程do
语法,所以例如,你可以直接执行的IO
操作,或者使用一元绑定语法像r <- someIOFun
。
let
同样的部分do
,所以你也可以用这个。 我认为这是被脱到let .. in <rest of the computation>
,因此,例如,当你这样做:
ghci> let a = 1
ghci> someFun
ghci> someFun2
就像是:
let a = 1 in
do someFun
someFun2
下面是相关的部分文件 。
GHCI语句作为IO计算执行。 所以, let
是一样的,你有一个里面是什么IO
,你用结合非IO表达单子let
。
欲了解更多下来到该代码的细节,在此评论TcRnDriver.lhs可能enlighting:
--------------------------------------------------------------------------
Typechecking Stmts in GHCi
Here is the grand plan, implemented in tcUserStmt
What you type The IO [HValue] that hscStmt returns
------------- ------------------------------------
let pat = expr ==> let pat = expr in return [coerce HVal x, coerce HVal y, ...]
bindings: [x,y,...]
pat <- expr ==> expr >>= \ pat -> return [coerce HVal x, coerce HVal y, ...]
bindings: [x,y,...]
expr (of IO type) ==> expr >>= \ it -> return [coerce HVal it]
[NB: result not printed] bindings: [it]
expr (of non-IO type, ==> let it = expr in print it >> return [coerce HVal it]
result showable) bindings: [it]
expr (of non-IO type,
result not showable) ==> error
所以在GHCI命令提示符,最多可以有三个方面影响:一些代码进行评估,有些事情是印刷,以及一些变量名的约束。 你的情况(第一个在注释)结合的变量,但不打印。
语法的确类似于DO-符号,所以@思南的答案有些正确的,但它是不是真的什么是引擎盖下发生 - 否则,例如,将永远被打印什么。
GHCI命令在IO单子执行和使用做语法,所以脱糖规则。 从真实世界哈斯克尔
doNotation4 =
do let val1 = expr1
val2 = expr2
{- ... etc. -}
valN = exprN
act1
act2
{- ... etc. -}
actN
翻译为:
translated4 =
let val1 = expr1
val2 = expr2
{- ... etc. -}
valN = exprN
in do act1
act2
{- ... etc. -}
actN