Chalk this up as another cautionary tale about global singletons.

There can be only one print-method, yet we have two conflicting use
cases: repl interaction, and data transport.

What we need is a parameterizable write-edn function, mirroring the
already extant read-edn. The function should guarantee it will either
write valid EDN, or throw an exception. It should also take as an
argument a map that allows one to specify the printing function for
any datatype.

I've taken a stab at this in my merchant library
(https://github.com/kovasb/merchant), one of the yaks I shaved for
session. I haven't announced/documented it, but someone who really
needs a solution might be interested to know it exists. It also
provides a sane way to deal with tagged literals.

With write-edn out of the way, we need a similar function optimized
for printing forms at the repl (with no guarantee that its output is
itself readable), and make it the default for the various repls.








On Tue, Apr 1, 2014 at 1:24 PM, Maik Schünemann
<maikschuenem...@gmail.com> wrote:
> There is real no sensible default value rather than the current.
> But for me the current behaviour is no problem, just C-c C-c to interrupt
> evaluation (at least in cider)
>
> On Tue, Apr 1, 2014 at 7:02 PM, Gary Trakhman <gary.trakh...@gmail.com> wrote:
>> It's possible for an infinite print to be just fine, it's a streaming API
>> after all, consider invoking a clojure program in the middle of some unix
>> pipes.
>>
>>
>> On Tue, Apr 1, 2014 at 12:58 PM, Phillip Lord <phillip.l...@newcastle.ac.uk>
>> wrote:
>>>
>>>
>>> Of course, in this circumstances, infinitely long lists are not going to
>>> behave well either.
>>>
>>> But, it seems to me, that this is (or should be) independent of
>>> interactive use in the REPL. The current behaviour is never nice.
>>> Probably, there needs to be a *interactive-print-length* var or
>>> equivalent.
>>>
>>> Andy Fingerhut <andy.finger...@gmail.com> writes:
>>>
>>> > One argument for default value of *print-length* being nil: Plenty of
>>> > people print Clojure data structures to files and later read them back
>>> > in.
>>> > The data would be corrupted if *print-length* was a too-small numeric
>>> > value
>>> > for your particular data.  It might not be obvious until much later that
>>> > you have lost data.
>>> >
>>> > Andy
>>> >
>>> >
>>> > On Tue, Apr 1, 2014 at 9:00 AM, Andreas Liljeqvist <bon...@gmail.com>
>>> > wrote:
>>> >
>>> >> Is there any good reason for not providing a default value for
>>> >> *print-length*?
>>> >> I think that if you *really* want to print a list containing 100K
>>> >> items,
>>> >> you would have to set *print-length*.
>>> >>
>>> >> Basically it seems less harmful to set it to a nice value by
>>> >> default(42?)
>>> >> than possible locking up the REPL.
>>> >>
>>> >>
>>> >> On Tue, Apr 1, 2014 at 2:49 AM, Gary Trakhman
>>> >> <gary.trakh...@gmail.com>wrote:
>>> >>
>>> >>> http://clojuredocs.org/clojure_core/clojure.core/*print-length*
>>> >>>
>>> >>>
>>> >>> On Mon, Mar 31, 2014 at 8:49 PM, Christopher Howard
>>> >>> <cmhowa...@alaska.edu
>>> >>> > wrote:
>>> >>>
>>> >>>> Is there some kind of "safe" function for printing representations of
>>> >>>> lazy, infinite data structures? I'm finding I like using them inside
>>> >>>> other data structures here and there. However, when I go to play
>>> >>>> around with things in the REPL, sooner or later my workflow is
>>> >>>> interrupted by 3 million characters streaming across the console.
>>> >>>>
>>> >>>> I don't imagine there would be any way for the REPL to detect that a
>>> >>>> lazy sequence was infinite. However, if it would simply refuse to
>>> >>>> evaluate lazy sequence (say, represent them by some special
>>> >>>> identifier)
>>> >>>> that
>>> >>>> would be good enough for me.
>>> >>>>
>>> >>>> --
>>> >>>> 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
>>> >>>> ---
>>> >>>> You received this message because you are subscribed to the Google
>>> >>>> Groups "Clojure" group.
>>> >>>> To unsubscribe from this group and stop receiving emails from it,
>>> >>>> send
>>> >>>> an email to clojure+unsubscr...@googlegroups.com.
>>> >>>> For more options, visit https://groups.google.com/d/optout.
>>> >>>>
>>> >>>
>>> >>>  --
>>> >>> 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
>>> >>> ---
>>> >>> You received this message because you are subscribed to the Google
>>> >>> Groups
>>> >>> "Clojure" group.
>>> >>> To unsubscribe from this group and stop receiving emails from it, send
>>> >>> an
>>> >>> email to clojure+unsubscr...@googlegroups.com.
>>> >>> For more options, visit https://groups.google.com/d/optout.
>>> >>>
>>> >>
>>> >>  --
>>> >> 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
>>> >> ---
>>> >> You received this message because you are subscribed to the Google
>>> >> Groups
>>> >> "Clojure" group.
>>> >> To unsubscribe from this group and stop receiving emails from it, send
>>> >> an
>>> >> email to clojure+unsubscr...@googlegroups.com.
>>> >> For more options, visit https://groups.google.com/d/optout.
>>> >>
>>>
>>> --
>>> Phillip Lord,                           Phone: +44 (0) 191 222 7827
>>> Lecturer in Bioinformatics,             Email:
>>> phillip.l...@newcastle.ac.uk
>>> School of Computing Science,
>>> http://homepages.cs.ncl.ac.uk/phillip.lord
>>> Room 914 Claremont Tower,               skype: russet_apples
>>> Newcastle University,                   twitter: phillord
>>> NE1 7RU
>>>
>>> --
>>> 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
>>> ---
>>> You received this message because you are subscribed to the Google Groups
>>> "Clojure" group.
>>> To unsubscribe from this group and stop receiving emails from it, send an
>>> email to clojure+unsubscr...@googlegroups.com.
>>> For more options, visit https://groups.google.com/d/optout.
>>
>>
>> --
>> 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
>> ---
>> You received this message because you are subscribed to the Google Groups
>> "Clojure" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to clojure+unsubscr...@googlegroups.com.
>> For more options, visit https://groups.google.com/d/optout.
>
> --
> 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
> ---
> You received this message because you are subscribed to the Google Groups 
> "Clojure" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to clojure+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.

-- 
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
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to