For example, `main = do input <- getLine ...', where `getLine' is an
action as distinguished from a function such as `main'. Other
examples of actions in Haskell include `print', `putStrLn' and
Actions aren't so much a formal thing as a conceptual "handle" to help with understanding monads. In particular, what a particular action represents depends on the monad, and in some cases on the particular implementation (for example, an IO action in GHC is a partially applied function, but this is an implementation detail that does nothing to help you understand how to work with it).