+match

    
      
diff --git a/pythonetc/README.md b/pythonetc/README.md
index e00155f..0a8836b 100644
--- a/pythonetc/README.md
+++ b/pythonetc/README.md
@@ -61,3 +61,7 @@ More:
 1. ./comprehension-func.md      (3 November 2020, 18:00)
 1. ./slots-docs.md              (5 November 2020, 18:00)
 1. ./pydoc.md                   (10 November 2020, 18:00)
+
+Out of order:
+
+1. ./match.md                   (26 June 2020, 18:00)
diff --git a/pythonetc/match.md b/pythonetc/match.md
new file mode 100644
index 0000000..b045523
--- /dev/null
+++ b/pythonetc/match.md
@@ -0,0 +1,84 @@
+On this Tuesday, a team of 5 authors (including Guido van Rossum) published [PEP-622](https://www.python.org/dev/peps/pep-0622/). This is a huge draft in terms of size, complexity, and impact. It is a proposal to extend Python syntax to support structural [pattern matching](https://en.wikipedia.org/wiki/Pattern_matching). Think about it as `if` statement on steroids.
+
+A small example using `match` as [switch statement](https://en.wikipedia.org/wiki/Switch_statement):
+
+```python
+def http_error(status: int) -> str:
+  match status:
+    case 400:
+        return 'Bad request'
+    case 401:
+        return 'Unauthorized'
+    case _:
+        return 'Something else'
+```
+
+Impractical but reach example:
+
+```python
+def inspect(obj) -> None:
+  match obj:
+    case 0 | 1 | 2:   # matching 2 or more exact values
+      print('small number')
+    case x if x > 2:  # guards
+      print('big positive number')
+    case [] | [_]:    # matching sequence
+      print('zero or one element sequence')
+    case [x, _, *_]:  # unpacking to match rest
+      print('2 or more elements sequence')
+      print(f'the first element is {x}')
+    case {'route': route}:  # matching dicts
+      print(f'dict with ONLY `route` key which is {route}')
+    case {'route': _, **_}:  # matching rest for dicts
+      print(f'dict with `route` key')
+    case str() | bytes():  # matching types
+      print('something string-like')
+    case [x := [_, *_]]:  # walrus and sub-patterns
+      print('non-empty list inside a list')
+    case _:  # default case
+      print('something else')
+```
+
+For objects, the check is implemented via `__match__` magic method. For `object` it does `isinstance` check. This is why `case str()` works:
+
+```python
+class object:
+  @classmethod
+  def __match__(cls, obj):
+    if isinstance(obj, cls):
+      return obj
+```
+
+Also, it is possible to match objects' attributes:
+
+```python
+class Point:
+  def __init__(self, x, y):
+    self.x = x
+    self.y = y
+
+match obj:
+  case Point(x=0, y=0):
+    print('both x and y are zero')
+  case Point():
+    print('it is a point')
+  case _:
+    print('something else')
+```
+
+Also, if a class has `__match_args__`, the given arguments can be positional in the pattern:
+
+```python
+class Point:
+  __match_args__ = ['x', 'y']
+
+  def __init__(self, x, y):
+    self.x = x
+    self.y = y
+
+match obj:
+  case Point(0, 0):  # here args are positional now
+    print('both x and y are zero')
+```
+
+You already can try it using [patma](https://github.com/gvanrossum/patma). It is a fork of CPython with the reference implementation of the draft. It is expected to land into Python in 3.10 release.