ff-notes / ron

Haskell implementation of RON and RON-RDT
BSD 3-Clause "New" or "Revised" License
65 stars 9 forks source link

Add enum extending another enum #115

Open cblp opened 4 years ago

cblp commented 4 years ago

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)