在哪里`where`子句在Haskell中派上用场

mac*_*ian 6 syntax haskell coding-style where-clause

我发现我很少遇到需要使用该where条款的情况.但是,我确实发现我过去经常使用它.何时where使用该子句(即它使用的是什么情况)?我应该在什么情况下使用它?

scl*_*clv 11

Haskell Wiki上提供的这个问题有两个很好的答案:

http://haskell.org/haskellwiki/Declaration_vs._expression_style http://haskell.org/haskellwiki/Let_vs._Where

两者都用于创建本地定义,这些定义可能使用传递到其封闭函数范围内的值,并且当然不能在封闭函数的上下文之外使用.它们促进代码重用并最大限度地减少重复 鉴于fix和lambda,两者都可以完全消失.通常,我尽可能使用where子句,并且在do使用通过<-前一行提取的值时,只倾向于在lambda或case块内或在符号中使用let子句.一般来说,我认为声明式风格现在比惯用现代Haskell代码中的表达风格更为普遍.