empty == [] add newkey newval [] == [ [], newkey, newval, [] ] add newkey newval [ L, oldkey, oldval, R ] == \ [ L, oldkey, newval, R ] \ <| newkey = oldkey |> \ [ add newkey newval L, oldkey, oldval, R ] \ <| newkey < oldkey |> \ [ L, oldkey, oldval, add newkey newval R ] get key [] == [] get key [ L, oldkey, oldval, R ] == \ oldval \ <| key = oldkey |> \ get key L \ <| key < oldkey |> \ get key R a == add "one" [1, "I"] empty b == add "two" [2, "II"] a c == add "three" [3, "III"] b d == add "four" [4, "IV"] c e == add "five" [5, "V"] d f == add "six" [6, "VI"] e g == add "seven" [7, "VII"] f h == add "eight" [8, "VIII"] g i == add "nine" [9, "IX"] h j == add "ten" [10, "X"] i k == add "eleven" [11, "XI"] j l == add "twelve" [12, "XII"] k m == add "thirteen" [13, "XIII"] l n == add "fourteen" [14, "XIV"] m o == add "fifteen" [15, "XV"] n