Skip to content

Instantly share code, notes, and snippets.

@Elvecent
Last active March 5, 2018 04:14
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Elvecent/ef052b7059b768a2256385f637b83883 to your computer and use it in GitHub Desktop.
Save Elvecent/ef052b7059b768a2256385f637b83883 to your computer and use it in GitHub Desktop.
Heterogenous trees
data List {α} : Set α → Set α where
[] : ∀ {X} → List X
_::_ : ∀ {X} → X → List X → List X
map : ∀ {α β} → {A : Set α} → {B : Set β} →
(f : A → B) → List A → List B
map f [] = []
map f (x :: xs) = f x :: map f xs
data hList {α} : List (Set α) → Set α where
[] : hList []
_::_ : {l : List (Set α)} → {A : Set α} →
(x : A) → hList l →
hList (A :: l)
data BinTree {α} (A : Set α) : Set α where
[] : BinTree A
bt : (x : A) → (l : BinTree A) → (r : BinTree A) → BinTree A
data hBinTree {α} : BinTree (Set α) → Set α where
[] : hBinTree []
bt : {l r : BinTree (Set α)} → {A : Set α} →
(x : A) → hBinTree l → hBinTree r →
hBinTree (bt A l r)
data RoseTree {α} (A : Set α) : Set α where
rose : A → List (RoseTree A) → RoseTree A
{-# NO_POSITIVITY_CHECK #-}
data hRoseTree {α} : RoseTree (Set α) → Set α where
hrose : {lt : List (RoseTree (Set α))} → {A : Set α} →
(x : A) → hList (map hRoseTree lt) →
hRoseTree (rose A lt)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment