Edward,
I had the exact same thought but I couldn't get it to work. Oddly enough, I actually copied and pasted that example from my code which builds and runs perfectly well. It seems that monad transformers work differently when defined as a type (instead of newtype, which would require me to include the type parameter)?
Somewhat related is the question of how to actually *export* this type alias from a module.
> module Money (($)) where
>
> type f $ x = f x
> infixr 0 $
doesn't work because it tries to export Prelude.$. The only way around it is to import Prelude hiding (($)). But this makes me wonder, is it actually *impossible* in Haskell to export from the same module a function with the same name at both the value and type level? Is it possible to export only one of the two?
Elliot