diff --git a/NatMap.agda b/NatMap.agda new file mode 100644 index 0000000..9349210 --- /dev/null +++ b/NatMap.agda @@ -0,0 +1,48 @@ +module NatMap where + +open import Agda.Primitive using (Level) +open import Data.Nat using (ℕ; _ NatMap A +insert n a [] = (n , a) ∷ [] +insert n a l@(x@(n' , a') ∷ xs) with n A -> A) -> NatMap A -> NatMap A -> NatMap A +merge _ [] m₂ = m₂ +merge _ m₁ [] = m₁ +merge f m₁@(x₁@(n₁ , a₁) ∷ xs₁) m₂@(x₂@(n₂ , a₂) ∷ xs₂) with <-cmp n₁ n₂ +... | Tri.tri< _ _ _ = x₁ ∷ merge f xs₁ m₂ +... | Tri.tri> _ _ _ = x₂ ∷ merge f m₁ xs₂ +... | Tri.tri≈ _ _ _ = (n₁ , f a₁ a₂) ∷ merge f xs₁ xs₂ + +testMerge : merge (_++_) ((1 , "one") ∷ (2 , "two") ∷ []) ((2 , "two") ∷ (3 , "three") ∷ []) ≡ (1 , "one") ∷ (2 , "twotwo") ∷ (3 , "three") ∷ [] +testMerge = refl