Documentation
//? [Valkyrie]
crate module_name;

using std.traits.<SYM_TRAIT>PartialEq</SYM_TRAIT>;
using <KEYWORD>depot</KEYWORD>.{<SYM_CLASS>ExternalClass</SYM_CLASS> <KEYWORD>as</KEYWORD> <SYM_CLASS>Ec</SYM_CLASS>, <SYM_TRAIT>ExternalTrait</SYM_TRAIT> <KEYWORD>as</KEYWORD> <SYM_TRAIT>Et</SYM_TRAIT>};

trait <SYM_TRAIT>TraitName</SYM_TRAIT> {
    def <SYM_FUNCTION_SELF>trait_method</SYM_FUNCTION_SELF>(<SYM_ARG_SELF>self</SYM_ARG_SELF>) -> Self;
    def <SYM_FUNCTION_SELF>trait_method_mut</SYM_FUNCTION_SELF>(<KEYWORD>mut</KEYWORD> <SYM_ARG_SELF_MUT>self</SYM_ARG_SELF_MUT>) -> Self;
    def <SYM_FUNCTION_FREE>trait_static</SYM_FUNCTION_FREE>(<SYM_ARG>arg</SYM_ARG> = 0) -> Self;
    def <SYM_FUNCTION_FREE>trait_static_mut</SYM_FUNCTION_FREE>(<KEYWORD>mut</KEYWORD> <SYM_ARG_MUT>arg</SYM_ARG_MUT>) -> Self;
}

class <SYM_CLASS>ClassName</SYM_CLASS>: <SYM_TRAIT>PartialEq</SYM_TRAIT> {
    <SYM_FIELD>field_string</SYM_FIELD>: <SYM_CLASS>String</SYM_CLASS> = <STRING>""</STRING>
    <SYM_FIELD>field_bool</SYM_FIELD>: <SYM_CLASS>Boolean</SYM_CLASS> = <KEYWORD>true</KEYWORD>
    <SYM_FIELD>field_int</SYM_FIELD>: <SYM_CLASS>Integer</SYM_CLASS> = 0
    <SYM_FIELD>field_f32</SYM_FIELD>: <SYM_CLASS>Decimal</SYM_CLASS> = 0.0
}

//?
class <SYM_CLASS>ClassTuple</SYM_CLASS>(<SYM_CLASS>Integer</SYM_CLASS> = 0, <SYM_CLASS>Integer</SYM_CLASS> = 0)

//?
<SYM_MACRO>#derive</SYM_MACRO>(<SYM_TRAIT>PartialEq</SYM_TRAIT>)
class <SYM_CLASS>ClassBlock</SYM_CLASS> {
    0: <SYM_CLASS>Integer</SYM_CLASS> = 0,
    1: <SYM_CLASS>Integer</SYM_CLASS> = 0,
}

tagged <SYM_CLASS>TaggedName</SYM_CLASS> {
    <SYM_VARIANT>VariantName</SYM_VARIANT>()
}

bitset <SYM_CLASS>BitsetName</SYM_CLASS>(<KEYWORD>u8</KEYWORD>) {
   <SYM_FIELD>BIT_FIELD</SYM_FIELD> = 0b0000_0001
}

def <SYM_FUNCTION_FREE>is_some</SYM_FUNCTION_FREE>(<SYM_ARG>maybe</SYM_ARG>: Option<T>) -> <SYM_CLASS>Boolean</SYM_CLASS> {
    <SYM_ARG>maybe</SYM_ARG> match {
        case Some(s): true
        case None: false
    }
}