#7479: ArrowChoice unit law in haddock seems to be wrong
Reporter:  pminten            |          Owner:                  
    Type:  bug                |         Status:  new             
Priority:  normal             |      Component:  libraries/base  
 Version:  7.7                |       Keywords:                  
      Os:  Unknown/Multiple   |   Architecture:  Unknown/Multiple
 Failure:  Documentation bug  |      Blockedby:                  
Blocking:                     |        Related:                  
 In the haddock documentation of !ArrowChoice there is an (unnamed) law:
 "{{{left f >>> arr Left = arr Left >>> f}}}". In Ross Paterson's
 [http://www.soi.city.ac.uk/~ross/papers/fop.html Arrows and Computations]
 paper there is a similar law named the unit law for !ArrowChoice that goes
 "{{{pure Left >>> left f = f >>> pure Left}}}" ("pure" in that paper is
 "arr" in the base library).

 Reordering the unit law from the paper and replacing "pure" with "arr" the
 unit law from the paper is "{{{f >>> arr Left = arr Left >>> left f}}}"
 where the law from haddock is "{{{left f >>> arr Left = arr Left >>>
 f}}}". The laws are similar but "left" is used in different places.

 The law from haddock appears to be invalid, there does not appear to be a
 way to create an arrow "f" in such a way that it works with both sides of
 the equation. This can be verified by typing the following lines in GHCi:

 import Control.Arrow
 let foo f = left f >>> arr Left
 let bar f = arr Left >>> f
 let same :: a b c -> a b c -> (); same _ _ = ()
 \f -> same (foo f) (bar f)

 The last line gives a type error.

Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/7479>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler

Glasgow-haskell-bugs mailing list

Reply via email to