ron
ron copied to clipboard
Add enum extending another enum
Motivating example from ff:
(enum Status
Active Archived)
(opaque_atoms NoteStatus)
; data NoteStatus = TaskStatus Status | Wiki
Boilerplate:
wiki :: UUID
wiki = fromJust $ UUID.mkName "Wiki"
instance Replicated NoteStatus where
encoding = payloadEncoding
instance ReplicatedAsPayload NoteStatus where
toPayload = \case
TaskStatus status -> toPayload status
Wiki -> toPayload wiki
fromPayload = \case
[AUuid u] | u == wiki -> pure Wiki
p -> TaskStatus <$> fromPayload p
Proposed syntax:
(enum NoteStatus (extends Status) Wiki)