F[F[A]]is "create shared state to store memoization"
F[A]is "read or populate the shared memoization state"
F[_]means in terms of language feature
F[_]is a higher kinded type parameter
* -> *, because it requires a proper type (say
Int), and it gives you another proper type
Eitheris of kind
* -> * -> *(they are curried, so you can think of it as having two arguments)
(* -> *) -> * -> *