<feed xmlns='http://www.w3.org/2005/Atom'>
<title>guix.git/guix/monads.scm, branch master</title>
<subtitle>Personal branch of https://git.savannah.gnu.org/cgit/guix.git/ for implementing 'guix deploy'.
</subtitle>
<id>https://git.jakob.space/guix.git/atom?h=master</id>
<link rel='self' href='https://git.jakob.space/guix.git/atom?h=master'/>
<link rel='alternate' type='text/html' href='https://git.jakob.space/guix.git/'/>
<updated>2019-02-06T22:06:18Z</updated>
<entry>
<title>monads, gexp: Prevent redefinition of syntax parameters.</title>
<updated>2019-02-06T22:06:18Z</updated>
<author>
<name>Ludovic Courtès</name>
<email>ludo@gnu.org</email>
</author>
<published>2019-02-06T20:58:43Z</published>
<link rel='alternate' type='text/html' href='https://git.jakob.space/guix.git/commit/?id=8245bb74fc7bdcdc2f9d458057cefc9cd982e489'/>
<id>urn:sha1:8245bb74fc7bdcdc2f9d458057cefc9cd982e489</id>
<content type='text'>
Fixes &lt;https://bugs.gnu.org/27476&gt;.

This fixes multi-threaded compilation of this code where syntax
parameters could end up being redefined and where a race condition could
lead a thread to see the "wrong" value of the syntax parameter.

* guix/monads.scm (define-syntax-parameter-once): New macro.
(&gt;&gt;=, return): Use it.
* guix/gexp.scm (define-syntax-parameter-once): New macro.
(current-imported-modules, current-imported-extensions): Use it.
</content>
</entry>
<entry>
<title>monads: Add a template and specialization mechanism for monadic procedures.</title>
<updated>2017-05-02T21:41:13Z</updated>
<author>
<name>Ludovic Courtès</name>
<email>ludo@gnu.org</email>
</author>
<published>2017-05-02T20:47:36Z</published>
<link rel='alternate' type='text/html' href='https://git.jakob.space/guix.git/commit/?id=dcb95c1fc936d74dfdf84b7e59eff66cb99c5a63'/>
<id>urn:sha1:dcb95c1fc936d74dfdf84b7e59eff66cb99c5a63</id>
<content type='text'>
* guix/monads.scm (%templates, %template-instances): New variables.
(register-template!, register-template-instance!): New procedures.
(template-directory, define-template): New macro.
(foldm, sequence, anym): Define using 'define-template'.  Avoid replace
ellipses with dots.
(mapm): Likewise, but do not use 'foldm'.
* guix/store.scm: Add 'template-directory' invocation.
</content>
</entry>
<entry>
<title>monads: Improve mlet, mlet*, and mbegin documentation.</title>
<updated>2017-04-08T12:40:51Z</updated>
<author>
<name>Chris Marusich</name>
<email>cmmarusich@gmail.com</email>
</author>
<published>2017-04-06T09:28:36Z</published>
<link rel='alternate' type='text/html' href='https://git.jakob.space/guix.git/commit/?id=8bc2183fe54487793e9eb6b39ba01329671840b9'/>
<id>urn:sha1:8bc2183fe54487793e9eb6b39ba01329671840b9</id>
<content type='text'>
* doc/guix.texi (The Store Monad) &lt;mlet, mlet*, mbegin&gt;: Clarify
their intended usage.
* guix/monads.scm (mbegin): Update docstring accordingly.

Signed-off-by: Ludovic Courtès &lt;ludo@gnu.org&gt;
</content>
</entry>
<entry>
<title>monads, doc: Improve mwhen and munless documentation.</title>
<updated>2017-04-08T12:40:51Z</updated>
<author>
<name>Chris Marusich</name>
<email>cmmarusich@gmail.com</email>
</author>
<published>2017-04-06T09:28:35Z</published>
<link rel='alternate' type='text/html' href='https://git.jakob.space/guix.git/commit/?id=60a9fcb1377e4acc78a930904ef80b69a1c63f25'/>
<id>urn:sha1:60a9fcb1377e4acc78a930904ef80b69a1c63f25</id>
<content type='text'>
* doc/guix.texi (The Store Monad) &lt;mwhen, munless&gt;: Document them.
* guix/monads.scm (mwhen, munless): Clarify their intended use.

Signed-off-by: Ludovic Courtès &lt;ludo@gnu.org&gt;
</content>
</entry>
<entry>
<title>monads: Use intent-revealing parameter names.</title>
<updated>2017-04-08T12:40:50Z</updated>
<author>
<name>Chris Marusich</name>
<email>cmmarusich@gmail.com</email>
</author>
<published>2017-04-06T09:28:34Z</published>
<link rel='alternate' type='text/html' href='https://git.jakob.space/guix.git/commit/?id=d922c8e4b773407ca525360e8c564484db34db07'/>
<id>urn:sha1:d922c8e4b773407ca525360e8c564484db34db07</id>
<content type='text'>
* guix/monads.scm (mwhen, munless): Rename parameters from 'exp0' and 'exp' to
  'mexp0' and 'mexp', respectively.  This makes it more obvious that these
  expressions must be monadic expressions.

Signed-off-by: Ludovic Courtès &lt;ludo@gnu.org&gt;
</content>
</entry>
<entry>
<title>monads: Fix 'liftN' fallback case.</title>
<updated>2015-09-04T16:31:06Z</updated>
<author>
<name>Ludovic Courtès</name>
<email>ludo@gnu.org</email>
</author>
<published>2015-09-04T16:31:06Z</published>
<link rel='alternate' type='text/html' href='https://git.jakob.space/guix.git/commit/?id=dbbc248aeef1bc3b5d76268782acff43e9d71d57'/>
<id>urn:sha1:dbbc248aeef1bc3b5d76268782acff43e9d71d57</id>
<content type='text'>
Reported by Andy Wingo &lt;wingo@igalia.com&gt;.

* guix/monads.scm (define-lift) &lt;fallback case&gt;: Add missing #'.  Remove
  extra formal parameter.
* tests/monads.scm ("lift"): Add test with 'lift1' as a procedure.
</content>
</entry>
<entry>
<title>monads: Inline the procedure returned by liftN.</title>
<updated>2015-08-28T23:22:54Z</updated>
<author>
<name>Ludovic Courtès</name>
<email>ludo@gnu.org</email>
</author>
<published>2015-08-28T13:17:20Z</published>
<link rel='alternate' type='text/html' href='https://git.jakob.space/guix.git/commit/?id=b6c6105cacf8093bafcdbb73fad591070cfaa8d7'/>
<id>urn:sha1:b6c6105cacf8093bafcdbb73fad591070cfaa8d7</id>
<content type='text'>
* guix/monads.scm (define-lift): Turn into a macro that open-codes the result
  of its lift.
</content>
</entry>
<entry>
<title>monads: Allow n-ary '&gt;&gt;=' expressions.</title>
<updated>2015-06-08T21:00:49Z</updated>
<author>
<name>Ludovic Courtès</name>
<email>ludo@gnu.org</email>
</author>
<published>2015-06-08T20:49:50Z</published>
<link rel='alternate' type='text/html' href='https://git.jakob.space/guix.git/commit/?id=751630c9c3f7f3e87dfccc5f5ba8cf61cdd6f8fd'/>
<id>urn:sha1:751630c9c3f7f3e87dfccc5f5ba8cf61cdd6f8fd</id>
<content type='text'>
Suggested by Federico Beffa &lt;beffa@fbengineering.ch&gt;.

* guix/monads.scm (bind-syntax): New macro.
  (with-monad): Use it instead of 'identifier-syntax'.
* tests/monads.scm ("&gt;&gt;= with more than two arguments"): New test.
* doc/guix.texi (The Store Monad): Explain that there can be several MPROC.
  Add an example.
</content>
</entry>
<entry>
<title>monads: 'foldm', 'mapm', and 'anym' now take a list of regular values.</title>
<updated>2015-05-27T07:44:43Z</updated>
<author>
<name>Ludovic Courtès</name>
<email>ludo@gnu.org</email>
</author>
<published>2015-05-27T07:40:19Z</published>
<link rel='alternate' type='text/html' href='https://git.jakob.space/guix.git/commit/?id=b734996f9cf395705860703422d5e92565dd3a13'/>
<id>urn:sha1:b734996f9cf395705860703422d5e92565dd3a13</id>
<content type='text'>
* guix/monads.scm (foldm, mapm, anym): Change to take a list of regular
  values as is customary.
* tests/monads.scm ("mapm", "anym"): Adjust accordingly.
</content>
</entry>
<entry>
<title>monads: Optimize 'sequence'.</title>
<updated>2015-04-17T16:15:38Z</updated>
<author>
<name>Ludovic Courtès</name>
<email>ludo@gnu.org</email>
</author>
<published>2015-04-17T16:15:38Z</published>
<link rel='alternate' type='text/html' href='https://git.jakob.space/guix.git/commit/?id=8d7dc5d9dbf009009d33e21598f92c4685965cd5'/>
<id>urn:sha1:8d7dc5d9dbf009009d33e21598f92c4685965cd5</id>
<content type='text'>
* guix/monads.scm (sequence): Rewrite as a macro.  This yields a 10%
  improvement in wall-clock time for 'guix system build'.
</content>
</entry>
</feed>
