Tôi có một vài loại tên miền trong mã của tôi mà tôi sử dụng để phân biệt các loại khác nhau của chuỗi, vì vậy trình biên dịch có thể ngăn cản tôi từ ví dụ qua các đối số theo thứ tự sai:F # loại bí danh cho chuỗi không nullable
type Foo = string
type Bar = string
let baz (foo : Foo) (bar : Bar) = printfn "%A %A" foo bar
let f : Foo = "foo"
let b : Bar = "bar"
baz f b // this should be OK
baz b f // this shouldn't compile
Tuy nhiên, điều này hiện không hoạt động một cách thỏa đáng, vì hai lý do:
- tôi đã không thể tìm ra một cách để xác định rằng
null
là không phải là giá trị hợp lệ, vì vậy tôi không thể đảm bảo rằng phiên bảnFoo
sẽ không bao giờ lànull
. - Cả incantantions thực sự biên dịch (và chạy) - vì vậy tôi đã đạt được gì: D
Có cách nào để xác định bí danh kiểu đó
a) tham khảo/quấn cùng loại, nhưng không tương thích với nhau và b) không cho phép các giá trị null
, ngay cả khi loại cơ bản sẽ cho phép?
Tôi không biết cách nào để ngăn chặn 'null' như một giá trị tại compiletime. Xem thêm [SO câu hỏi này] (http://stackoverflow.com/questions/42341535/how-to-make-illegal-values-unrepresentable) –