Lavorare in Haskell, ha trovato strano comportamento, messo a nudo giù alle ossa nudeQuale indentazione è richiesta per un'istruzione case all'interno di una dichiarazione let?
questo funziona
a :: Bool
a = case True of
True -> True
False -> False
Ma quando provo
b :: IO Bool
b = do
let b' = case True of
True -> True
False -> False
return b'
ottengo
ghci>:l test.hs
[1 of 1] Compiling Main (test.hs, interpreted)
test.hs:16:14: parse error on input ‘->’
Failed, modules loaded: none.
Così Provo
c :: IO Bool
c = do
let c' = case True of
True -> True
False -> False
return c'
E questo funziona.
Cosa? Perché? Perché ho bisogno di un rientro extra in questo caso? Non riesco a trovare nulla su questo, probabilmente perché queste parole chiave sono così brevi e comuni nel linguaggio quotidiano. C'è qualche specifica che spiega questo comportamento?
Il livello di indentazione del blocco 'let' inizia dal primo carattere non di spazi bianchi dopo' let'.Quindi 'True' viene interpretato come clausola nel blocco' let'; un altro spazio ti porterà all'interno del blocco 'case' – luqui