Haskell 哈斯克尔。其中有两个定义

Haskell 哈斯克尔。其中有两个定义,haskell,Haskell,两个或两个以上区块是否有任何方式使用“where”?大概是这样的: plus:: Int -> Int -> Int plus a b = x + y where x = f1 a where y = f2 b 除第一个,其中的,其余均不显示: plus:: Int -> Int -> Int plus a b = x + y where x = f1 a y = f2 b 注意 这

两个或两个以上区块是否有任何方式使用“where”?大概是这样的:

plus:: Int -> Int -> Int
plus a b = x + y
         where x = f1 a
         where y = f2 b

除第一个
,其中的
,其余均不显示:

plus:: Int -> Int -> Int
plus a b = x + y
         where x = f1 a
               y = f2 b
注意

  • 这些定义必须相互一致
  • 您应该仅使用空格缩进定义,而不使用制表符(某些文本编辑器不使用制表符的标准制表符宽度,这会导致ghc认为最后一行缩进得比实际缩进得更远或更小;任何一种方式都会导致错误)

我想建议大家简单地阅读一下where语法:。一个常见的问题是,文本编辑器和ghc可能对选项卡的宽度存在分歧。确保两行都只缩进空格(而不是制表符)。否则,您会收到什么错误消息?或者,它以什么方式不起作用?哦,是的。标签和空格都有问题。非常感谢您不仅不应该使用制表符,而且也不应该使用任何东西,除了缩进敏感位置左侧的空格。在本例中,您应该在
的where
后面加一个换行符。同样的论点也适用:编辑器可以使用非单空格字体。Rotsor可以,但通常不会。我试着按照你的建议去做,但有时——特别是使用let——会造成相当多的空间浪费。