Одна часть вашего вопроса легко отвечает. В одном предложении where
может быть несколько определений, как в
foo n
| even r = bar
| s < 12 = baz
| otherwise = quux
where
r = n `mod` 1357
h = a + b
where
(a,b) = r `divMod` 53 -- nested where-clause
s = r - 3*h
и вы можете иметь вложенные where
-классы. Но в where
-пункте вы можете иметь только определения. Условия будут идти в охранники (или if then else
выражения с правой стороны) и могут быть объединены с логическими операторами, (&&)
, (||)
, not
...
Что касается вашего кода, до сих пор я не понял, что вы намеревались сделать.