Napisałem następującą (trywialną) funkcję:
h c = [f x | x <- a, f <- b, (a, b) <- c]
Spodziewałem się, że zostanie to odcukrzone jako:
h c = do (a, b) <- c
f <- b
x <- a
return (f x)
Z kolei odcukrzono (ignorując rzeczy fail
) jako:
h c = c >>= \(a, b) -> b >>= \f -> a >>= \x -> return (f x)
Jednak GHCi zwraca błąd:
<interactive>:24:17: error: Variable not in scope: a :: [a1]
<interactive>:20:27: error:
Variable not in scope: b :: [t0 -> b1]
Wydaje się to bezsensowne, ponieważ a
i b
są rzeczywiście w zakresie.
3
schuelermine
18 listopad 2018, 22:28
1 odpowiedź
Najlepsza odpowiedź
Twoje wiązania są w złej kolejności.
h c = [f x | (a,b) <- c, f <- b, x <- a]
12
Jorge Adriano
18 listopad 2018, 22:31
Podobne pytania
Nowe pytania
list
Znacznik listy może odnosić się do: połączonej listy (uporządkowanego zbioru węzłów, z których każdy odwołuje się do swojego następcy) lub postaci tablicy dynamicznej. Nie należy używać do list HTML, zamiast tego użyj [html-list].