Кристаллический эквивалент алгебраическим типам данных

Какой идиоматический способ написать эквивалент алгебраического типа данных в Crystal? Например, в Хаскеле я мог бы

data Stage = StageInitial String | StageFinished String

Итак, я хочу иметь два этапа, каждый из которых имеет строку полезной нагрузки. Позже я хочу сыграть в матче на сцене.

Как бы вы написали это в Crystal?

1 ответ

Решение

Вы можете грубо подражать

record StageInitial, data : String
record StageFinished, data : String
alias Stage = StageInitial | StageFinished

тогда образец совпадает с case,

Однако это не совсем идиоматический способ структурировать это в Crystal, так что вы можете столкнуться с трениями позже.

Другие вопросы по тегам