
Michael Mossey wrote:
incrCursor :: State PlayState ()
Additional question: what is proper terminology here?
Proper terminology for monadic things is somewhat debated.
"incrCursor is a monad"
This is not true.
"incrCursor is a monadic type"
incrCursor is not a type, so this can't be correct. However, "incrCursor has a monadic type" is somewhat reasonable. However, I would avoid it because it is quite vague.
"incrCursor is a monadic function" "incrCursor is a monadic computation"
These sound good to me. I would prefer the latter, because incrCursor does not take any arguments, so it is debatable whether it is a function. From my point of view, "monadic functions" should mean a function of type (a -> m b) where m is a monad, i.e. arrows in a Kleisli category. An alternative to "monadic computation" would be "monadic action". However, since we know which monad it is, I would prefer "incrCursor is a state transformer" or even "incrCursor is a PlayState transformer".
"State is a monad" "State is a type constructor of a monad" "State is a monadic type"
None of these seem to be true. However, the following is: "(State PlayState) is a monad". If you want to say something about State, maybe "State is a parametric monad" or "State is a family of monads" is appropriate. Tillmann