Во-первых, дискриминационные союзы требуют своих идентификаторов, начинающихся с прописных букв:
type score =
InInteger of int
| InFloat of float
Во-вторых, вы можете определить функцию add
для этого типа данных путем сопоставления шаблона со всеми возможными случаями и возврата соответствующих значений:
let add s1 s2 =
match s1, s2 with
| InInteger i1, InInteger i2 -> InInteger (i1 + i2)
| InInteger i1, InFloat f2 -> InFloat (float i1 +. f2)
| InFloat f1, InInteger i2 -> InFloat (f1 +. float i2)
| InFloat f1, InFloat f2 -> InFloat (f1 +. f2)