我可以在where语法下定义多个函数吗?

时间:2018-06-25 06:10:24

标签: haskell

我只看到一个示例,该示例正在检查列表是否为后代

nondec :: Ord a => [a] -> Bool
nondec xs = and (map leq (zip xs (tail xs)))
            where leq (x, y) = x <= y

我想知道我可以在where语法下定义多个函数吗。

例如,如果map函数未定义,我可以这样定义吗

where leq (x, y) = x <= y
      map(...)

2 个答案:

答案 0 :(得分:3)

  

我可以这样定义吗

为什么不尝试呢?因为是的,您可以完全像这样进行操作。 leqmap只需从同一列开始,并在与where所在的行开始的列的右边(不一定在where本身的右边) 。

我认为Wikibook explains the rules for indentation很好。

答案 1 :(得分:2)

像往常一样缩进:

nondec :: Ord a => [a] -> String
nondec as = map leq as where
                          leq = id
                          map _ _ = "Hi!"