Почему бы не изменить функцию try_connect_tcp
для работы непосредственно с типом ConnectionState
?
let try_connect_tcp hostname port =
try
Connected (TcpClient (hostname, port))
with
| :? ArgumentNullException -> printf "Empty Hostname"; Disconnected
| :? ArgumentOutOfRangeException -> printf "Invalid portnumber"; Disconnected
| :? SocketException -> printf "IDK MAN"; Disconnected
Редактировать: Если вы действительно хотите использовать Option.fold
, функция для передачи требуется два параметра. В вашем случае, используя вашу оригинальную функцию try_connect_tcp
, вы можете написать ее так:
let connect connectionstate hostname port =
match connectionstate with
| Disconnected ->
try_connect_tcp hostname port
|> Option.fold (fun _ x -> Connected x) Disconnected
| _ -> connectionstate