Mi sono imbattuto recentemente in un pezzo di codice che utilizzava lo otherwise
di Haskell per associare il modello a un elenco. Questo mi ha colpito come strano, dal momento che:Haskell's `otherwise` è un sinonimo di` _`?
ghci> :t otherwise
otherwise :: Bool
Così, ho provato la seguente:
ghci> case [] of otherwise -> "!?"
"!?"
Ho provato anche con diversi altri modelli di diversi tipi e con -XNoImplicitPrelude
acceso (per rimuovere otherwise
da scope), e funziona ancora. Questo dovrebbe succedere? Dove è documentato?
Nel preludio, definisce 'altrimenti = True'. Usandolo in un pattern match si limita a dare ombra a questa definizione, introducendo una nuova variabile locale che viene chiamata anche 'altrimenti'. Un esempio simile è il "caso" che lo shadowing può confondere "of (==) ->" Y'know, "++ (==)', che restituisce "" Sai, lo shadowing può confondere "'. – AndrewC
Proprio perché nessuno lo ha ancora detto, 'altrimenti' dovrebbe essere usato come espressione di guardia, non come modello. 'caso ... di pat | ... -> ... | altrimenti -> ... 'Ora la sua definizione come' True' è importante. –
@AndrewC, ottimo esempio! – luqui