============================================ destructuring pattern ============================================ x@[y] := z --- (program term: (assignment pattern: (destructuring_pattern alias: (identifier_pattern_name) pattern: (list_pattern element: (identifier_pattern name: (identifier_pattern_name)))) value: (identifier))) ============================================ struct pattern ============================================ { b: c :: Type } := a { b: c :: Type, d :: Type, ['e']: e :: Type, ...f :: Type = {} } := a --- (program term: (assignment pattern: (destructuring_pattern pattern: (struct_pattern member: (member_pattern key: (shorthand_member_identifier) value: (identifier_pattern name: (identifier_pattern_name) type: (parametric_type name: (type)))))) value: (identifier)) term: (assignment pattern: (destructuring_pattern pattern: (struct_pattern member: (member_pattern key: (shorthand_member_identifier) value: (identifier_pattern name: (identifier_pattern_name) type: (parametric_type name: (type)))) member: (shorthand_member_pattern name: (identifier_pattern_name) type: (parametric_type name: (type))) member: (member_pattern key: (string) value: (identifier_pattern name: (identifier_pattern_name) type: (parametric_type name: (type)))) rest: (identifier_pattern name: (identifier_pattern_name) type: (parametric_type name: (type)) default: (struct)))) value: (identifier))) ============================================ tagged struct pattern ============================================ { b: c :: Type } := a { b: c :: Type, d :: Type, ['e']: e :: Type, ...f :: Type = {} } := a --- (program term: (assignment pattern: (tagged_pattern name: (identifier) pattern: (destructuring_pattern pattern: (struct_pattern member: (member_pattern key: (shorthand_member_identifier) value: (identifier_pattern name: (identifier_pattern_name) type: (parametric_type name: (type))))))) value: (identifier)) term: (assignment pattern: (tagged_pattern name: (identifier) pattern: (destructuring_pattern pattern: (struct_pattern member: (member_pattern key: (shorthand_member_identifier) value: (identifier_pattern name: (identifier_pattern_name) type: (parametric_type name: (type)))) member: (shorthand_member_pattern name: (identifier_pattern_name) type: (parametric_type name: (type))) member: (member_pattern key: (string) value: (identifier_pattern name: (identifier_pattern_name) type: (parametric_type name: (type)))) rest: (identifier_pattern name: (identifier_pattern_name) type: (parametric_type name: (type)) default: (struct))))) value: (identifier))) ============================================ tuple pattern ============================================ (a, b :: Type, ...c) := a --- (program term: (assignment pattern: (destructuring_pattern pattern: (tuple_pattern element: (identifier_pattern name: (identifier_pattern_name)) element: (identifier_pattern name: (identifier_pattern_name) type: (parametric_type name: (type))) rest: (identifier_pattern name: (identifier_pattern_name)))) value: (identifier))) ============================================ tagged tuple pattern ============================================ (a, b :: Type, ...c) := a --- (program term: (assignment pattern: (tagged_pattern name: (identifier) pattern: (destructuring_pattern pattern: (tuple_pattern element: (identifier_pattern name: (identifier_pattern_name)) element: (identifier_pattern name: (identifier_pattern_name) type: (parametric_type name: (type))) rest: (identifier_pattern name: (identifier_pattern_name))))) value: (identifier))) ============================================ list pattern ============================================ [b :: Type, c :: Type] := a [b :: Type, c :: Type, ...d :: Type = [1]] := a --- (program term: (assignment pattern: (destructuring_pattern pattern: (list_pattern element: (identifier_pattern name: (identifier_pattern_name) type: (parametric_type name: (type))) element: (identifier_pattern name: (identifier_pattern_name) type: (parametric_type name: (type))))) value: (identifier)) term: (assignment pattern: (destructuring_pattern pattern: (list_pattern element: (identifier_pattern name: (identifier_pattern_name) type: (parametric_type name: (type))) element: (identifier_pattern name: (identifier_pattern_name) type: (parametric_type name: (type))) rest: (identifier_pattern name: (identifier_pattern_name) type: (parametric_type name: (type)) default: (list element: (number))))) value: (identifier))) ============================================ tagged list pattern ============================================ [b :: Type, c :: Type] := a [b :: Type, c :: Type, ...d :: Type = [1]] := a --- (program term: (assignment pattern: (tagged_pattern name: (identifier) pattern: (destructuring_pattern pattern: (list_pattern element: (identifier_pattern name: (identifier_pattern_name) type: (parametric_type name: (type))) element: (identifier_pattern name: (identifier_pattern_name) type: (parametric_type name: (type)))))) value: (identifier)) term: (assignment pattern: (tagged_pattern name: (identifier) pattern: (destructuring_pattern pattern: (list_pattern element: (identifier_pattern name: (identifier_pattern_name) type: (parametric_type name: (type))) element: (identifier_pattern name: (identifier_pattern_name) type: (parametric_type name: (type))) rest: (identifier_pattern name: (identifier_pattern_name) type: (parametric_type name: (type)) default: (list element: (number)))))) value: (identifier))) ============================================ tagged pattern ============================================ := a --- (program term: (assignment pattern: (tagged_pattern name: (identifier)) value: (identifier)))