haskell-type-classes.tex 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. \documentclass[varwidth=false, border=2pt]{standalone}
  2. \usepackage{tikz}
  3. \usetikzlibrary{shapes}
  4. \begin{document}
  5. \begin{tikzpicture}
  6. \tikzstyle{node}=[ellipse,thick,fill=white,draw=black,inner sep=0pt,text width=3cm,align=center]
  7. \tikzstyle{edge}=[->, ultra thick]
  8. \matrix[row sep=0.5cm,column sep=0.5cm] {
  9. \node[node] (Eq) {\textbf{Eq}\\All except IO, (->)}; &
  10. \node[node] (Show) {\textbf{Show}\\All except IO, (->)}; &
  11. \node[node] (Read) {\textbf{Read}\\All except IO, (->)}; \\
  12. \node[node] (Ord) {\textbf{Ord}\\All except IO, (->), IOError}; &
  13. \node[node] (Num) {\textbf{Num}\\Int, Integer, Float, Double}; &
  14. \node[node] (Bounded) {\textbf{Bounded}\\Int, Char, Bool, (), Ordering, tuples}; \\
  15. \node[node] (Enum) {\textbf{Enum}\\{\small (), Bool, Char, Ordering, Int, Integer, Float, Double}}; &
  16. \node[node] (Real) {\textbf{Real}\\Int, Integer, Float, Double}; &
  17. \node[node] (Fractional) {\textbf{Fractional}\\Float, Double}; \\
  18. \node[node] (Integral) {\textbf{Integral}\\Int, Integer}; &
  19. \node[node] (RealFrac) {\textbf{RealFrac}\\Float, Double}; &
  20. \node[node] (Floating) {\textbf{Floating}\\Float, Double}; \\
  21. \node[node] (Monad) {\textbf{Monad}\\IO, (), Maybe}; &
  22. \node[node] (RealFloat) {\textbf{RealFloat}\\Float, Double}; &
  23. \\
  24. \node[node] (MonadPlus) {\textbf{MonadPlus}\\IO, (), Maybe}; &
  25. \node[node] (Functor) {\textbf{Functor}\\IO, (), Maybe}; &
  26. \\
  27. };
  28. \draw[edge] (Eq) -- (Ord);
  29. \draw[edge] (Eq) -- (Num);
  30. \draw[edge] (Show) -- (Num);
  31. \draw[edge] (Ord) -- (Real);
  32. \draw[edge] (Num) -- (Real);
  33. \draw[edge] (Num) -- (Fractional);
  34. \draw[edge] (Enum) -- (Integral);
  35. \draw[edge] (Real) -- (Integral);
  36. \draw[edge] (Real) -- (RealFrac);
  37. \draw[edge] (Floating) -- (RealFloat);
  38. \draw[edge] (RealFrac) -- (RealFloat);
  39. \draw[edge] (Monad) -- (MonadPlus);
  40. \end{tikzpicture}
  41. \end{document}