<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -10,3 +10,33 @@ cell(:LexicalBlock) &lt;- = method(other,
   if(cell?(:activatable) &amp;&amp; activatable,
     fnx(arg, cell(:outsideSelf) call(cell(:other) call(arg))),
     fn(arg, cell(:outsideSelf) call(cell(:other) call(arg)))))
+
+cell(:LexicalBlock) &amp; = method(other,
+  outsideSelf = self
+  if(cell?(:activatable) &amp;&amp; activatable,
+    fnx(arg,
+      res1 = cell(:outsideSelf) call(arg)
+      res2 = cell(:other) call(arg)
+      res1 &amp;&amp; res2),
+    fn(arg,
+      res1 = cell(:outsideSelf) call(arg)
+      res2 = cell(:other) call(arg)
+      res1 &amp;&amp; res2)))
+
+cell(:LexicalBlock) | = method(other,
+  outsideSelf = self
+  if(cell?(:activatable) &amp;&amp; activatable,
+    fnx(arg,
+      res1 = cell(:outsideSelf) call(arg)
+      res2 = cell(:other) call(arg)
+      res1 || res2),
+    fn(arg,
+      res1 = cell(:outsideSelf) call(arg)
+      res2 = cell(:other) call(arg)
+      res1 || res2)))
+
+cell(:LexicalBlock) complement = method(
+  outsideSelf = self
+  if(cell?(:activatable) &amp;&amp; activatable,
+    fnx(arg, !(cell(:outsideSelf) call(arg))),
+    fn(arg, !(cell(:outsideSelf) call(arg)))))</diff>
      <filename>src/builtin/H10_lexicalBlock.ik</filename>
    </modified>
    <modified>
      <diff>@@ -190,6 +190,61 @@ describe(LexicalBlock,
     )
   )
 
+  describe(&quot;&amp;&quot;,
+    it(&quot;should take a block and return a new one that combines them using boolean logic&quot;,
+      x = fn(a, a &gt; 5)
+      y = fn(a, a &lt; 10)
+      res = x &amp; y
+      res call(0) should be false
+      res call(1) should be false
+      res call(2) should be false
+      res call(3) should be false
+      res call(4) should be false
+      res call(5) should be false
+      res call(6) should be true
+      res call(7) should be true
+      res call(8) should be true
+      res call(9) should be true
+      res call(10) should be false
+      res call(11) should be false
+      res call(12) should be false
+    )
+  )
+
+  describe(&quot;|&quot;,
+    it(&quot;should take a block and return a new one that combines them using boolean logic&quot;,
+      x = fn(a, a &lt; 5)
+      y = fn(a, a &gt; 10)
+      res = x | y
+      res call(0) should be true
+      res call(1) should be true
+      res call(2) should be true
+      res call(3) should be true
+      res call(4) should be true
+      res call(5) should be false
+      res call(6) should be false
+      res call(7) should be false
+      res call(8) should be false
+      res call(9) should be false
+      res call(10) should be false
+      res call(11) should be true
+      res call(12) should be true
+    )
+  )
+
+  describe(&quot;complement&quot;,
+    it(&quot;should return a new block that is the complement of the original one&quot;,
+      x = fn(a, a &lt; 5)
+      res = x complement
+      res call(0) should be false
+      res call(4) should be false
+      res call(5) should be true
+      res call(6) should be true
+      res call(7) should be true
+      res call(8) should be true
+    )
+  )
+
   it(&quot;should report arity failures with regular arguments&quot;,
     noargs = fnx(nil)
     onearg = fnx(x, nil)</diff>
      <filename>test/fn_spec.ik</filename>
    </modified>
  </modified>
  <removed type="array">
    <removed>
      <filename>docs/functionali_composition</filename>
    </removed>
  </removed>
  <parents type="array">
    <parent>
      <id>b5daff4df24fce4c522fb88e24fe7f261298c52c</id>
    </parent>
  </parents>
  <author>
    <name>Ola Bini</name>
    <email>ola.bini@gmail.com</email>
  </author>
  <url>http://github.com/olabini/ioke/commit/06dccbe0ca062bc286f674774ea49166e33a2f2c</url>
  <id>06dccbe0ca062bc286f674774ea49166e33a2f2c</id>
  <committed-date>2009-11-05T08:48:06-08:00</committed-date>
  <authored-date>2009-11-05T08:48:06-08:00</authored-date>
  <message>Make functional composition easier</message>
  <tree>98211d6335d7ed7d0f6575a292efdeb2ccb79a8b</tree>
  <committer>
    <name>Ola Bini</name>
    <email>ola.bini@gmail.com</email>
  </committer>
</commit>
