2011/1/8 Ken Wesson <kwess...@gmail.com>

> On Sat, Jan 8, 2011 at 3:11 PM, Laurent PETIT <laurent.pe...@gmail.com>
> wrote:
> > 2011/1/8 Ken Wesson <kwess...@gmail.com>
> >>
> >> On Sat, Jan 8, 2011 at 2:09 PM, Laurent PETIT <laurent.pe...@gmail.com>
> >> wrote:
> >> > 2011/1/8 Ken Wesson <kwess...@gmail.com>
> >> >>
> >> >> On Sat, Jan 8, 2011 at 12:33 PM, Stuart Halloway
> >> >> <stuart.hallo...@gmail.com> wrote:
> >> >> > One goal of resource scopes [1] is to help with scoping activities
> at
> >> >> > the REPL. That said, I think this is a "ramping up" problem -- I
> >> >> > rarely if
> >> >> > ever hit it anymore.
> >> >> >
> >> >> > Stu
> >> >> >
> >> >> > [1] http://dev.clojure.org/display/design/Resource+Scopes
> >> >>
> >> >> Eww.
> >> >>
> >> >> The more I think about it, the more I'm convinced that it's far
> >> >> preferable to use a pure functional approach. Instead of fixing
> >> >>
> >> >> (defn foo [x]
> >> >>  (with-open [bar (baz x)]
> >> >>    (make-some-lazy-seq bar)))
> >> >>
> >> >> (map do-something-with (foo quux))
> >> >>
> >> >> -> IOException: stream closed
> >> >>
> >> >> with "resource scopes", or even with
> >> >>
> >> >> (defn foo [x]
> >> >>  (with-open [bar (baz x)]
> >> >>    (doall (make-some-lazy-seq bar))))
> >> >>
> >> >> (map do-something-with (foo quux))
> >> >>
> >> >> isn't the truly functional way to use HOF like this?
> >> >>
> >> >> (defn foo [x processor]
> >> >>  (with-open [bar (baz x)]
> >> >>    (processor (make-some-lazy-seq bar))))
> >> >>
> >> >> (foo quux #(map do-something-with %))
> >> >
> >> > With the implicit assumption that your processor is not lazy itself
> ...
> >>
> >> Yes, obviously. I figure it could be anything from (doall (take 5
> >> ...)) to (reduce #(assoc ...) {} ...) or whatnot, resulting in a
> >> number, a map, a short eager seq, or some such. After all you are
> >> querying the file for something, boiling it down to something, aren't
> >> you? (first (filter identity (map #(re-matches ...) (line-seq ...))))
> >> perhaps, to emit the first occurrence of some pattern in a text file?
> >> Whatever.
> >
> >
> > So we can altogether get rid of the concept of lazy seq, following your
> > argument :)
>
> Of course not. It's still useful all the way up to the point that the
> result is obtained and distilled down. But using a passed-in function
> that consumes it while the with-open or binding is still in effect
> makes more sense than making the latter's effect somehow linger in the
> lazy-seq, given the difficulties the latter creates both with
> implementation and avoiding surprising behavior.
>
>

I understand the desire.
I question the generality.
;)

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Reply via email to