{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "46e9fc16",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "629"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#| label: nb4\n",
    "#| echo: true\n",
    "length(subtypes(Any))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "9feb9e06",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Number\n",
      "       Complex\n",
      "       Real\n",
      "              AbstractFloat\n",
      "                     BigFloat\n",
      "                     Float16\n",
      "                     Float32\n",
      "                     Float64\n",
      "              AbstractIrrational\n",
      "                     Irrational\n",
      "              Integer\n",
      "                     Bool\n",
      "                     Signed\n",
      "                            BigInt\n",
      "                            Int128\n",
      "                            Int16\n",
      "                            Int32\n",
      "                            Int64\n",
      "                            Int8\n",
      "                     Unsigned\n",
      "                            UInt128\n",
      "                            UInt16\n",
      "                            UInt32\n",
      "                            UInt64\n",
      "                            UInt8\n",
      "              Rational\n"
     ]
    }
   ],
   "source": [
    "#| label: nb1\n",
    "#| echo: true\n",
    "\n",
    "function show_subtype_tree(T, i=0)\n",
    "    println(\"       \"^i, T)\n",
    "    for Ts ∈ subtypes(T)\n",
    "        show_subtype_tree(Ts, i+1)\n",
    "    end\n",
    "end\n",
    "\n",
    "show_subtype_tree(Number)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "fe5594b9",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Number\n",
      "├─ Complex\n",
      "└─ Real\n",
      "   ├─ AbstractFloat\n",
      "   │  ├─ BigFloat\n",
      "   │  ├─ Float16\n",
      "   │  ├─ Float32\n",
      "   │  └─ Float64\n",
      "   ├─ AbstractIrrational\n",
      "   │  └─ Irrational\n",
      "   ├─ Integer\n",
      "   │  ├─ Bool\n",
      "   │  ├─ Signed\n",
      "   │  │  ├─ BigInt\n",
      "   │  │  ├─ Int128\n",
      "   │  │  ├─ Int16\n",
      "   │  │  ├─ Int32\n",
      "   │  │  ├─ Int64\n",
      "   │  │  └─ Int8\n",
      "   │  └─ Unsigned\n",
      "   │     ├─ UInt128\n",
      "   │     ├─ UInt16\n",
      "   │     ├─ UInt32\n",
      "   │     ├─ UInt64\n",
      "   │     └─ UInt8\n",
      "   └─ Rational\n"
     ]
    }
   ],
   "source": [
    "#| label: nb2\n",
    "#| echo: true\n",
    "using AbstractTrees\n",
    "\n",
    "AbstractTrees.children(x::Type) = subtypes(x)\n",
    "print_tree(Number)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "0dcccd86",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "4-element Vector{Any}:\n",
       " AbstractFloat\n",
       " AbstractIrrational\n",
       " Integer\n",
       " Rational"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#| label: nb3\n",
    "#| echo: true\n",
    "subtypes(Real)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "dfabcc51",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "@webio": {
   "lastCommId": null,
   "lastKernelId": null
  },
  "kernelspec": {
   "display_name": "Julia 1.8.5",
   "language": "julia",
   "name": "julia-1.8"
  },
  "language_info": {
   "file_extension": ".jl",
   "mimetype": "application/julia",
   "name": "julia",
   "version": "1.8.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
