10 | data Trie : (Type -> Type) -> Type -> Type -> Type where
11 | MkTrie : Maybe a -> mk (Trie mk ks a) -> Trie mk ks a
15 | {m : Type -> Type -> Type} -> {k : Type} ->
16 | FiniteMap m k => FiniteMap (Trie (m k)) (List k) where
17 | empty = MkTrie Nothing empty
19 | lookup [] t = case t of
21 | lookup (k :: ks) t = case t of
22 | MkTrie b m => lookup k m >>= \m' => lookup ks m'
24 | bind [] x t = case t of
25 | MkTrie b m => MkTrie (Just x) m
26 | bind (k :: ks) x t = case t of
27 | MkTrie b m => let t = fromMaybe empty $
lookup k m
29 | in MkTrie b (bind k t' m)