Имея такой тип непересекающегося объединения:
type yolo = | A | B | C
Возможно ли в OCaml перебирать/перебирать каждое возможное значение типа yolo
без предварительного знания того, сколько/каковы эти значения?
Чего я хочу добиться, так это функции, которая принимает тип и возвращает список со всеми его значениями. Например:
let yolos = extractor yolo
val yolos : yolo list = [A; B; C]
(Я ищу способ реализовать функцию extractor
из приведенного выше фрагмента)
В F# моя цель достижима примерно так:
open Microsoft.FSharp.Reflection
type yolo =
| A
| B
| C
let yolos = FSharpType.GetUnionCases typeof<yolo>
Да, это возможно. Похоже, вы ищете ppx_enumerate от Jane Street, который делает именно это, даже работая с полиморфными типами.
@glennsl да, на самом деле я отметил свой вопрос как дубликат того, который вы упомянули. Думаю, единственным преимуществом перед этим является мой фрагмент F#.