[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
04/08: monads: Micro-optimize 'foldm'.
From: |
Ludovic Courtès |
Subject: |
04/08: monads: Micro-optimize 'foldm'. |
Date: |
Fri, 13 May 2016 21:49:50 +0000 (UTC) |
civodul pushed a commit to branch wip-build-systems-gexp
in repository guix.
commit cb0db9001c7d5bd934fa67cf3d778d4d20aca2d6
Author: Ludovic Courtès <address@hidden>
Date: Sat Apr 4 17:58:41 2015 +0200
monads: Micro-optimize 'foldm'.
* guix/monads.scm (foldm): Hoist 'monad-bind' and 'monad-return' calls
outside of the loop. Use explicit >>= instead of 'mlet*', and
explicit return instead of 'with-monad' + 'return'.
---
guix/monads.scm | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/guix/monads.scm b/guix/monads.scm
index 0b0ad23..8a0f974 100644
--- a/guix/monads.scm
+++ b/guix/monads.scm
@@ -266,7 +266,9 @@ MONAD---i.e., return a monadic function in MONAD."
(foldm %state-monad (lift2 cons %state-monad) '() '(a b c))
=> '(c b a) ;monadic
"
- (with-monad monad
+ ;; Hoist access to MONAD's 'bind' and 'return' fields outside of the loop.
+ (let ((>>= (monad-bind monad))
+ (return (monad-return monad)))
(let loop ((lst lst)
(result init))
(match lst
- branch wip-build-systems-gexp created (now 640a798), Ludovic Courtès, 2016/05/13
- 05/08: tests: Add 'test-assertm' to (guix tests)., Ludovic Courtès, 2016/05/13
- 03/08: gexp: Micro-optimize sexp serialization., Ludovic Courtès, 2016/05/13
- 08/08: DRAFT gexp: Handle list conversion to <gexp-input> in the expanded code., Ludovic Courtès, 2016/05/13
- 06/08: packages: Turn 'bag->derivation' into a monadic procedure., Ludovic Courtès, 2016/05/13
- 01/08: gnu: bootstrap: Move 'use-modules' forms to the beginning of build expressions., Ludovic Courtès, 2016/05/13
- 07/08: store: Add a functional object cache and use it in 'lower-object'., Ludovic Courtès, 2016/05/13
- 04/08: monads: Micro-optimize 'foldm'.,
Ludovic Courtès <=
- 02/08: build-system: Rewrite using gexps., Ludovic Courtès, 2016/05/13