ron icon indicating copy to clipboard operation
ron copied to clipboard

Add enum extending another enum

Open cblp opened this issue 6 years ago • 0 comments

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)

cblp avatar Sep 11 '19 13:09 cblp