On Mon, Nov 10, 2014 at 10:09 PM, Jeffrey Brown <jeffbrown.the@gmail.com> wrote:
Until this OSC library, I had never seen the "a" in "IO a" represent a pipe; it had always represented data to be passed *through* a pipe.

http://lambda.haskell.org/platform/doc/current/ghc-doc/libraries/haskell2010-1.1.1.0/System-IO.html#v:openFile produces an IO Handle.

File I/O is often done with lazy I/O, which hides the Handle in the woodwork, but nothing stops you from using Handle-based I/O.
 
Why the long signature?
When I ask for it, GHC provides the following additional type signatures:
  > :t pause pause :: Double -> transformers-0.3.0.0:Control.Monad.Trans.Reader.ReaderT UDP IO () 
What's up with that?

You don't have the module that defines the type ReaderT in scope, so it dug out where the module you *do* have in scope got it from. And it gave full details, because conceivably you could have multiple versions of the transformers library installed --- although that usually leads to a lot of confusion (which ghc is trying to avoid here by giving the full pedigree).

BTW, I am going to guess, given that you later show a SendOSC that is a ReaderT UDP IO a, that SendOSC is a `type` (type alias) and not a `data` (a fully-fledged data type) or `newtype` (a wrapper for another type). That may answer your later questions: ghc will sometimes show the alias name and sometimes the type it expands to.

--
brandon s allbery kf8nh                               sine nomine associates
allbery.b@gmail.com                                  ballbery@sinenomine.net
unix, openafs, kerberos, infrastructure, xmonad        http://sinenomine.net