Action just wrap to taken polymorphism function.
It won't store polymorphism function.
You can use Action wrap any polymorphism functions that
input argument is instance of ActionInputArgs and
output argument is instance of ActionOutputArgs.

ActionOutputArgs is class to implement polymorphism result.
This class is very useful when you want transform pure function to Keymap.
You can return any result that instance of ActionOutputArgs,
then system will write those value back to Environment.
If you want update those value (such as TVar) yourself, just return `()`.