module Data.TrieMap.Class (TMap(..), TSet (..), TKey, Rep, TrieMap, TrieKey) where
import Data.TrieMap.TrieKey
import Data.TrieMap.Rep
import Data.TrieMap.Sized
import Control.Applicative
import Data.Foldable
import Data.Traversable
import Prelude hiding (foldr)
newtype TMap k a = TMap {getTMap :: TrieMap (Rep k) (Elem a)}
newtype TSet a = TSet (TMap a ())
class (Repr k, TrieKey (Rep k)) => TKey k
instance (Repr k, TrieKey (Rep k)) => TKey k
instance TKey k => Functor (TMap k) where
fmap = fmapDefault
instance TKey k => Foldable (TMap k) where
foldr f z (TMap m) = foldrWithKeyM (\ _ (Elem a) -> f a) m z
instance TKey k => Traversable (TMap k) where
traverse f (TMap m) = TMap <$> traverseWithKeyM (\ _ (Elem a) -> Elem <$> f a) m