Итак, еще один дискриминированный профсоюзный вопрос: -)
Предположим, у меня есть дискриминационный союз, например: -
type Foo =
| A of string
| B of int
| C of char
| D of string
Я бы хотел использовать функцию appendStringToFoo следующим образом: -
let someVal = A("hi")
let anotherVal = D("yo")
let hiya = someVal |> appendStringToFoo "ya"
let yoyo = anotherVal |> appendStringToFoo "yo"
Где хия = А ("хия")
и йойо = D ("йойо").
Очевидно, я бы также продолжал писать отдельные функции appendIntToFoo, appendCharToFoo и т. Д.
Итак, по сути, функция похожа на: -
let appendStringToFoo str fooValue =
fooValue(fooValue.Value + str)
Что не представляется возможным.
Я не хочу сделать следующее, если я могу избежать этого: -
let appendStringToFoo str fooValue =
match fooValue with
| A(originalStr) -> A(originalStr + str)
| D(originalStr) -> D(originalStr + str)
Поскольку это означает, что мне придется переписывать этот код каждый раз, когда я добавляю новый регистр объединения.
Есть идеи?