Mam kilka typów domen w moim kodzie, których używam do rozróżniania różnych typów łańcuchów, więc kompilator może mnie powstrzymać od np. przekazując argumenty w niewłaściwej kolejności:Alias typu F # dla ciągów nienaprawnych
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
to jednak obecnie nie działa w sposób zadowalający, z dwóch powodów:
- nie byłem w stanie wymyślić sposób, aby określić, że jest
null
nie jest to poprawna wartość, więc nie mogę zagwarantować, że instancjaFoo
nigdy nie będzienull
. - Oba incantantions faktycznie kompilować (i działać) - tak ja otrzymałem nic: D
Czy istnieje sposób, aby określić typ aliasów że
a) odnoszą się do/owinąć tego samego typu, ale są niekompatybilne ze sobą, a wartości odrzucają, nawet jeśli typ bazowy pozwoliłby na to?
nie jestem świadomy jakikolwiek sposób zapobiegania 'null' jako wartość w czasie kompilacji. Zobacz także [to pytanie SO] (http://stackoverflow.com/questions/42341535/how-to-make-illegal-values-reprepresentable) –