Variables in Haskell

后端 未结 3 970
再見小時候
再見小時候 2021-01-18 20:43

Why does the following Haskell script not work as expected?

find :: Eq a => a -> [(a,b)] -> [b]
find k t = [v | (k,v) <- t]

Giv

3条回答
  •  灰色年华
    2021-01-18 21:32

    The pattern match (k,v) <- t in the first example creates two new local variables v and k that are populated with the contents of the tuple t. The pattern match doesn't compare the contents of t against the already existing variable k, it creates a new variable k (which hides the outer one).

    Generally there is never any "variable substitution" happening in a pattern, any variable names in a pattern always create new local variables.

提交回复
热议问题