typeclass
https://serokell.io/blog/haskell-typeclasses
https://stackoverflow.com/questions/56526677/how-can-i-add-1-to-a-generic-t