Код проверки файлов для F #

У меня этот код вызывает ошибку, когда файл не существует.

if !File.Exists(doFile) then
    printfn "doFile doesn't exist %s" doFile; failwith "quit"

Однако я получил эту ошибку. Что не так?

error FS0001: This expression was expected to have type
    bool ref    
but here has type
    bool

Ответ 1

Оператор ! имеет особое значение в F #, его определяют как:

type 'a ref { Contents : 'a }
let (!) (x : ref 'a) = x.Contents

Вы получаете ошибку, потому что оператор ! ожидает bool ref, но вы передали ему bool.

Используйте вместо этого функцию not:

if not(File.Exists(doFile)) then
    printfn "doFile doesn't exist %s" doFile; failwith "quit"

Ответ 2

в F #! не является NOT, это справочная операция, так сказать, вам нужно использовать функцию not, что-то вроде if not <| File.Exists....