Secondo the System.Directory haddock, renameFile
potrebbe non riuscire con una serie di ragioni: si è verificatoHaskell: cattura di basso livello IO eccezioni
- HardwareFault un errore di I/O fisico. [EIO]
- InvalidArgument Entrambi gli operandi non sono un nome file valido. [ENAMETOOLONG, ELOOP]
- isDoesNotExistError/NoSuchThing Il file originale non esiste o non esiste alcun percorso per la destinazione. [ENOENT, ENOTDIR]
- isPermissionError/PermissionDenied Il processo dispone di privilegi insufficienti per eseguire l'operazione. [EROFS, EACCES, EPERM]
- ResourceExhausted Sono disponibili risorse insufficienti per eseguire l'operazione. [EDQUOT, ENOSPC, ENOMEM, EMLINK]
- Vincoli insoddisfatti I vincoli dipendenti dall'implementazione non sono soddisfatti. [EBUSY]
- UnsupportedOperation L'implementazione non supporta la ridenominazione in questa situazione. [EXDEV]
- InappropriateType Ciascun percorso si riferisce a una directory esistente. [ENOTDIR, EISDIR, EINVAL, EEXIST, ENOTEMPTY]
Un paio di questi (isPermissionError, isDoesNotExistError) hanno funzioni di test, ma altri (tra cui UnsupportedOperation, in cui sono interessato) non sembrano corrispondere a nulla. Che cos'è UnsupportedOperation
e come posso verificarlo?
Più in generale, come dovrei andare a scoprire che cos'è qualcosa del genere. Non riesco a vedere da nessuna parte nel codice sorgente in cui è sollevato, quindi suppongo che sia un involucro intorno a un errore di livello inferiore - ma come dovrei gestirmi con quelli?
Ti dispiacerebbe dare un esempio? Sto provando 'IOError _ UnsupportedOperation _ _ _ _ -> Just x' ma ricevo lamentele sull'esportazione IOError/IOException. – Impredicative
Non sono sicuro di cosa sia esattamente sbagliato con il tuo pattern matching, mi sembra ok. Ho aggiunto un esempio completo che compila e lavora per me. – Yuras
Hah! Effettuando un'importazione non qualificata completamente non mi è venuto in mente! Grazie! – Impredicative