Почему Haskell не разрешает сопоставление с образцом в понимании? - PullRequest
0 голосов
/ 18 ноября 2018

Я написал следующую (тривиальную) функцию:

h c = [f x | x <- a, f <- b, (a, b) <- c]

Я ожидал, что это будет desugared как:

h c = do (a, b) <- c
         f <- b
         x <- a
         return (f x)

В свою очередь, desugared (игнорируя fail материал) как:

h c = c >>= \(a, b) -> b >>= \f -> a >>= \x -> return (f x)

Однако GHCi возвращает ошибку:

<interactive>:24:17: error: Variable not in scope: a :: [a1]
<interactive>:20:27: error:
    Variable not in scope: b :: [t0 -> b1]

Это кажется бессмысленным, поскольку a и b действительно находятся в области видимости.

1 Ответ

0 голосов
/ 18 ноября 2018

Ваши привязки в неправильном порядке.

h c = [f x | (a,b) <- c, f <- b, x <- a]
...