Faça a declaração sob uma cláusula where

Estou tentando converterIO [String] para[String] com<- obrigatório; no entanto, preciso usar umdo bloco para fazer isso sob umwhere declaração, mas Haskell reclama do recuo o tempo todo. Aqui está o código:

decompEventBlocks :: IO [String] -> IO [[String]]
decompEventBlocks words
 | words' /= [] = block : (decompEventBlocks . drop $ (length block) words')
 | otherwise = []
  where 
   do
    words' <- words
    let block = (takeWhile (/="END") words')

Qual a razão disso? E como podemos usardo bloquear em umwhere declaração ? Além disso, há alguma chance de termos algumas declarações diante dos guardas?

questionAnswers(4)

yourAnswerToTheQuestion