=================================================
Closed Type Family Declaration
=================================================

type family Foo bar where
  Bar = Wiz
  Baz = 'Custom
  Bar.Baz a = 'Custom
  Bar.Baz (A a) = 'Custom


---

 (module
  (type_family_declaration
    (type_constructor_identifier)
    (type_variable_identifier)
    (where
      (function_declaration
        (constructor_identifier)
        (function_body
          (constructor_identifier)))
      (function_declaration
        (constructor_identifier)
        (function_body
          (quoted_name
            (type_constructor_identifier))))
      (function_declaration
        (constructor_pattern
          (qualified_constructor_identifier
            (module_identifier)
            (constructor_identifier))
            (variable_identifier))
        (function_body
          (quoted_name
            (type_constructor_identifier))))
      (function_declaration
        (constructor_pattern
          (qualified_constructor_identifier
            (module_identifier)
            (constructor_identifier))
          (parenthesized_pattern
            (constructor_pattern
              (constructor_identifier)
              (variable_identifier))))
        (function_body (quoted_name (type_constructor_identifier)))))))

=================================================
Open Type Family Declaration
=================================================

type family F a :: *
type instance F [Int] = Int
type instance F String = Char

---

(module
  (type_family_declaration
    (type_constructor_identifier)
    (type_variable_identifier)
    (kind_signature (annotation) (star)))
  (type_instance_declaration
    (type_constructor_identifier)
    (list_type (type (type_constructor_identifier)))
    (type_instance_body (type_pattern (type_constructor_identifier))))
  (type_instance_declaration
    (type_constructor_identifier)
    (type_constructor_identifier)
    (type_instance_body (type_pattern (type_constructor_identifier)))))

=================================================
Type Family With Mixed Kind Type Signatures
=================================================

type family Bar (baz :: [(* -> *) -> Wiz]) (foo :: * -> *) :: Wiz where

---

(module
  (type_family_declaration
    (type_constructor_identifier)
    (annotated_type_variable
      (type_variable_identifier)
      (annotation)
      (kind_list_type
        (kind_function_type
          (kind
            (kind_parenthesized_constructor
              (kind_function_type
                (kind (star))
                (kind (star)))))
          (type_constructor_identifier))))
    (annotated_type_variable
      (type_variable_identifier)
      (annotation)
      (kind_function_type
        (kind (star))
        (kind (star))))
    (type_signature
      (annotation)
      (type_constructor_identifier))
    (where)))
