Em Haskell, quando usamos o let?

No código a seguir, a última frase que posso colocar umin em frente. Isso vai mudar alguma coisa?

Outra pergunta: Se eu decidir colocarin na frente da última frase, preciso recuá-la?

Eu tentei sem recuar e abraços reclama

último gerador em {{}} deve ser uma expressão

import Data.Char
groupsOf _ [] = []
groupsOf n xs = 
    take n xs : groupsOf n ( tail xs )

problem_8 x = maximum . map product . groupsOf 5 $ x
main = do t <- readFile "p8.log" 
          let digits = map digitToInt $concat $ lines t
          print $ problem_8 digits
Edita

Ok, então as pessoas parecem não entender o que estou dizendo. Deixe-me reformular: os dois seguintes são iguais, dado o contexto acima?

1.

let digits = map digitToInt $concat $ lines t
print $ problem_8 digits

2.

let digits = map digitToInt $concat $ lines t
in print $ problem_8 digits

Outra questão relativa ao escopo das ligações declaradas emlet: Eu leioaqu que

whereláusula

s vezes, é conveniente escopo ligações de várias equações protegidas, o que requer uma cláusula where:

f x y  |  y>z           =  ...
       |  y==z          =  ...
       |  y<z           =  ...
     where z = x*x

Observe que isso não pode ser feito com uma expressão let, que apenas escopo a expressãoque inclui.

Minha pergunta: então, os dígitos variáveis não devem estar visíveis para a última frase impressa. Perdi alguma coisa aqui?

questionAnswers(4)

yourAnswerToTheQuestion