///|
priv struct TrieNode[A] {
  handler : Handler[A]? // root node has no handler
  children : @hashmap.HashMap[String, TrieNode[A]]
  mut variable_child : (String, TrieNode[A])?
}

///|
fn[A] TrieNode::create_root() -> TrieNode[A] {
  TrieNode::{ handler: None, children: @hashmap.new(), variable_child: None }
}

///|
fn[A] TrieNode::create_with_handler(handler : Handler[A]) -> TrieNode[A] {
  TrieNode::{
    handler: Some(handler),
    children: @hashmap.new(),
    variable_child: None,
  }
}