KdlDoc = seq[KdlNode]
KdlError = object of CatchableError
KdlLexerError = object of KdlError
KdlNode = object tag*: Option[string] name*: string args*: seq[KdlVal] props*: Table[string, KdlVal] children*: seq[KdlNode]
KdlParserError = object of KdlError
KdlPrefs[T] = object path*: string default*: T content*: T
KdlProp = tuple[key: string, val: KdlVal]
KdlVal = object tag*: Option[string] case kind*: KValKind of KString: str*: string of KFloat: fnum*: float of KBool: boolean*: bool of KNull, KEmpty: nil of KInt: num*: int64
KValKind = enum KEmpty, KString, KFloat, KBool, KNull, KInt