Tôi hiếm khi có cuộc đấu tranh này ngày nay với F #, nhưng sau đó nhập lại kiểu thừa kế ít phổ biến hơn với F #, vì vậy có lẽ tôi đã may mắn. Hoặc tôi thiếu điều hiển nhiên. Thông thường khi trình biên dịch phàn nàn về việc không biết một loại nào đó tôi đảo ngược thứ tự của các đường ống hoặc toán hạng thành phần và tôi đã hoàn thành.Loại suy luận với đường ống hoặc thành phần không thành công, nơi mà cuộc gọi hàm bình thường thành công
Về cơ bản, với một cuộc gọi chức năng hoạt động như g(f x)
, nó cũng hoạt động như x |> f |> g
hoặc (f >> g) x
. Nhưng hôm nay nó không ...
Dưới đây là một bằng chứng-of-concept lộn xộn của những gì tôi có nghĩa là:
module Exc =
open System
type MyExc(t) = inherit Exception(t)
let createExc t = new MyExc(t)
type Ex = Ex of exn
type Res = Success of string | Fail of Ex with
static member createRes1 t = Ex(createExc(t)) |> Fail // compiled
static member createRes2 t = t |> createExc |> Ex |> Fail // FS0001
static member createRes3 = createExc >> Ex >> Fail // FS0001
Thông thường, các công trình này (ít nhất là trong kinh nghiệm của tôi). Các đường có lỗi "không thành công":
lỗi FS0001: Loại không khớp. Mong đợi một MyExc -> 'a nhưng đưa ra một exn -> Ex. Loại 'MyExc' không khớp với loại 'exn'
Không phải là một vấn đề lớn, không khó giải quyết, nhưng tôi phải viết nhiều mã trong đó bố cục là cách tiếp cận dễ dàng/sạch hơn và tôi không muốn viết một loạt các chức năng tiện ích mà tôi phải đặt ở mọi nơi.
Tôi đã xem loại linh hoạt, vì tôi đoán đây là một vấn đề về ngoại cảm, nhưng tôi không thấy cách tôi có thể áp dụng tại đây. Bất kỳ ý tưởng để giữ thành ngữ này?
Lưu ý, nếu tôi sắp xếp lại, tức là Ex <<createExc>> Fail
hoặc sử dụng toán tử đường dẫn ngược, tôi sẽ gặp lỗi tương tự ở một phần khác.
Tuyệt vời và sâu sắc, như mọi khi, cảm ơn Tomas. Có vẻ như chúng tôi đồng ý rằng đây chắc chắn là một loại hành vi kỳ quặc. Tôi luôn luôn nghĩ (và thông thường đó là chính xác) mà các nhà xây dựng DU hành xử như các hàm và tôi chuỗi/soạn chúng tất cả các thời gian. Nhìn vào chữ ký của các thành viên DU, họ "trông giống như" chức năng. – Abel