#2446: Network.Socket.PortNum should not be exported
-------------------------+--------------------------------------------------
    Reporter:  cjs       |       Owner:          
        Type:  bug       |      Status:  new     
    Priority:  normal    |   Component:  Compiler
     Version:  6.8.3     |    Severity:  normal  
    Keywords:            |    Testcase:          
Architecture:  Multiple  |          Os:  Multiple
-------------------------+--------------------------------------------------
 Network.Socket exports a PortNum value constructor. Though there's no
 haddock documentation to say so, this constructs a value of type
 PortNumber by taking a Word16 in *machine* order, i.e., byte-swapped on
 little-endian machines.

 However, PortNumber is an instance of Num and has a fromIntegral (that
 converts from a non-byte-swapped int), so when specifying a PortNumber for
 a something such as a SockAddrInet, one should just use an Integral. That
 is, instead of

     SockAddrInet (PortNum $ fromIntegral (byteswap 12345)) hostaddr

 one should just use

     SockAddrInet 12345 hostaddr

 I think that the PortNum constructor should not be exported; it's
 difficult to use due to the lack of documentation (and its own nature,
 really), is not necessary, and worst of all, its existence has mislead at
 least two programmers I know of to use it when they didn't want or need
 to.

-- 
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/2446>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
_______________________________________________
Glasgow-haskell-bugs mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs

Reply via email to