module Data.Apart.Structures.Dictionary (Dictionary, Association (..)) where import "base" Data.Functor.Compose (Compose) import "free" Control.Comonad.Cofree (Cofree (..)) type Dictionary value = Cofree (Association value :.: Maybe) type (:.:) = Compose data Association value key = Association value key instance Functor (Association value) where fmap f (Association value key) = Association value $ f key instance Foldable (Association value) where foldr f acc (Association value key) = f key acc instance Traversable (Association value) where traverse f (Association value key) = Association value <$> f key