Sections with undefined operators have non-standard behavior
authorDavid Luposchainsky <dluposchainsky@gmail.com>
Fri, 11 Aug 2017 09:26:52 +0000 (11:26 +0200)
committerBen Gamari <ben@smart-cactus.org>
Thu, 17 Aug 2017 20:42:55 +0000 (16:42 -0400)
docs/users_guide/bugs.rst

index 7ccb215..f139db1 100644 (file)
@@ -348,6 +348,29 @@ The Foreign Function Interface
         single: hs_init
         single: hs_exit
 
+.. _infelicities-operator-sections:
+
+Operator sections
+^^^^^^^^^^^^^^^^^
+
+The Haskell Report demands that, for infix operators ``%``, the following
+identities hold:
+
+::
+    (% expr) = \x -> x % expr
+    (expr %) = \x -> expr % x
+
+However, the second law is violated in the presence of undefined operators,
+
+::
+    (%) = error "urk"
+    (() %)         `seq` () -- urk
+    (\x -> () % x) `seq` () -- OK, result ()
+
+The operator section is treated like function application of an undefined
+function, while the lambda form is in WHNF that contains an application of an
+undefined function.
+
 .. _haskell-98-2010-undefined:
 
 GHC's interpretation of undefined behaviour in HaskellĀ 98 and HaskellĀ 2010