The `tee/2` idea is wonderful!! This way we can use it for any function, not 
just `IO.inspect`. One word: PERFECT!!!

I am opening a PR for it...

Best,
Kelvin Stinghen
kelvin.sting...@me.com

> On Jan 15, 2018, at 19:27, José Valim <jose.va...@gmail.com> wrote:
> 
> The more general construct here would be a tee 
> <https://en.wikipedia.org/wiki/Tee_(command)>:
> 
> ["thing1", "thing2"]
> |> generate_more_things()
> |> IO.inspect(transform: &length/1)
> |> do_something_with_things()
> 
> could be written as:
> 
> ["thing1", "thing2"]
> |> generate_more_things()
> |> tee(&IO.inspect(length(&1))
> |> do_something_with_things()
> 
> Note IO.inspect is already a tee.
> 
> José Valim
> www.plataformatec.com.br <http://www.plataformatec.com.br/>
> Founder and Director of R&D
> 
> On Mon, Jan 15, 2018 at 10:14 PM, Martin Svalin <martin.sva...@gmail.com 
> <mailto:martin.sva...@gmail.com>> wrote:
> `map` would have the connotation of applying a function to all elements of a 
> collection. `apply` would more directly have the connotation of running a 
> function with some arguments.
> 
> `IO.inspect(value, apply: &length/1)`
> 
> I like the idea of being able to narrow down what I'm inspecting during the 
> print-debugging workflow I inevitably regress to. `nested_structure |> 
> IO.inspect(apply: & get_in(&1, [:foo, :bar, :baz]))`. Thumbs up for the idea.
> 
> mån 15 jan. 2018 kl 17:31 skrev Marcus Gartner <mar...@lob.com 
> <mailto:mar...@lob.com>>:
> Doh! I should have realized the issue with executing the function passed. 
> 
> I like the idea of a transform option that can be passed.
> 
> IO.map makes sense in my example, but wouldn't make sense to me if the 
> pipeline wasn't dealing with an enumerable, and it would be nice if this 
> feature was general enough to work idiomatically with any possible values. 
> 
> On Sat, Jan 13, 2018 at 7:38 PM OvermindDL1 <overmind...@gmail.com 
> <mailto:overmind...@gmail.com>> wrote:
> Or call it `map` as it's shorter and perfectly descriptive.  I've made a few 
> variants of this myself and I'd love it built into IO.inspect.
> 
> On Jan 12, 2018 16:31, "Greg Vaughn" <gvau...@gmail.com 
> <mailto:gvau...@gmail.com>> wrote:
> I like the original idea and would like to suggest another approach. What if 
> there were an additional Inspect.Opts of :transform? It then would enable 
> this sort of thing:
> 
> ["thing1", "thing2"]
> |> generate_more_things()
> |> IO.inspect(transform: &length/1)
> |> do_something_with_things()
> 
> -Greg Vaughn
> 
> > On Jan 12, 2018, at 5:18 PM, José Valim <jose.va...@gmail.com 
> > <mailto:jose.va...@gmail.com>> wrote:
> >
> > Thanks for the proposal!
> >
> > Unfortunately that would make us unable to inspect functions themselves, 
> > which is a valid argument to IO.inspect after all.
> >
> > Imagine the confusion of trying to inspect a pipeline that may emit an 
> > anonymous function only to find it is being executed instead.
> >
> >
> >
> > José Valim
> > www.plataformatec.com.br <http://www.plataformatec.com.br/>
> > Founder and Director of R&D
> >
> > On Fri, Jan 12, 2018 at 10:59 PM, <mar...@lob.com <mailto:mar...@lob.com>> 
> > wrote:
> > I often find myself wanting to inspect things in the middle of a chain of 
> > pipes, but I don’t always want to inspect the return values as-is. 
> > Sometimes I want to inspect sub-attributes or call functions on the return 
> > values to inspect them.
> >
> > For example, imagine the contrived pipeline below.
> >
> > ["thing1", "thing2"]
> > |> generate_more_things()
> > |> do_something_with_things()
> >
> > If I want to know the length of the list returned by 
> > generate_more_things/1, I would do this:
> >
> > ["thing1", "thing2"]
> > |> generate_more_things()
> > |> (fn things ->
> >   things |> length() |> IO.inspect()
> >   things
> > end).()
> > |> do_something_with_things()
> >
> > If IO.inspect can take a function as an argument, print the inspection of 
> > the result of calling that function, but still return the un-altered input, 
> > I could do this:
> >
> > ["thing1", "thing2"]
> > |> generate_more_things()
> > |> IO.inspect(fn things -> length(things) end)
> > |> do_something_with_things()
> >
> > Or even:
> >
> > ["thing1", "thing2"]
> > |> generate_more_things()
> > |> IO.inspect(&length/1)
> > |> do_something_with_things()
> >
> > I think this would aid during debugging and be a useful feature in the 
> > standard library. I'd love to implement and contribute on this, but I 
> > wanted to see if such a thing would be accepted before beginning work.
> >
> > Open to feedback!
> >
> > --
> > You received this message because you are subscribed to the Google Groups 
> > "elixir-lang-core" group.
> > To unsubscribe from this group and stop receiving emails from it, send an 
> > email to elixir-lang-core+unsubscr...@googlegroups.com 
> > <mailto:elixir-lang-core%2bunsubscr...@googlegroups.com>.
> > To view this discussion on the web visit 
> > https://groups.google.com/d/msgid/elixir-lang-core/4e2bfad0-b745-4059-8736-996e641c7bb2%40googlegroups.com
> >  
> > <https://groups.google.com/d/msgid/elixir-lang-core/4e2bfad0-b745-4059-8736-996e641c7bb2%40googlegroups.com>.
> > For more options, visit https://groups.google.com/d/optout 
> > <https://groups.google.com/d/optout>.
> >
> >
> > --
> > You received this message because you are subscribed to the Google Groups 
> > "elixir-lang-core" group.
> > To unsubscribe from this group and stop receiving emails from it, send an 
> > email to elixir-lang-core+unsubscr...@googlegroups.com 
> > <mailto:elixir-lang-core%2bunsubscr...@googlegroups.com>.
> > To view this discussion on the web visit 
> > https://groups.google.com/d/msgid/elixir-lang-core/CAGnRm4KAvw%2BwWnh7d60%3DvKEkuLvWfyoh4XuM9rbuxz_CaLg9%3DA%40mail.gmail.com
> >  
> > <https://groups.google.com/d/msgid/elixir-lang-core/CAGnRm4KAvw%2BwWnh7d60%3DvKEkuLvWfyoh4XuM9rbuxz_CaLg9%3DA%40mail.gmail.com>.
> > For more options, visit https://groups.google.com/d/optout 
> > <https://groups.google.com/d/optout>.
> 
> --
> You received this message because you are subscribed to the Google Groups 
> "elixir-lang-core" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to elixir-lang-core+unsubscr...@googlegroups.com 
> <mailto:elixir-lang-core%2bunsubscr...@googlegroups.com>.
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/elixir-lang-core/6CF01F3F-5848-4E19-BCA1-9D256824D6E0%40gmail.com
>  
> <https://groups.google.com/d/msgid/elixir-lang-core/6CF01F3F-5848-4E19-BCA1-9D256824D6E0%40gmail.com>.
> For more options, visit https://groups.google.com/d/optout 
> <https://groups.google.com/d/optout>.
> 
> -- 
> You received this message because you are subscribed to a topic in the Google 
> Groups "elixir-lang-core" group.
> To unsubscribe from this topic, visit 
> https://groups.google.com/d/topic/elixir-lang-core/TUkmNHI4IbI/unsubscribe 
> <https://groups.google.com/d/topic/elixir-lang-core/TUkmNHI4IbI/unsubscribe>.
> To unsubscribe from this group and all its topics, send an email to 
> elixir-lang-core+unsubscr...@googlegroups.com 
> <mailto:elixir-lang-core+unsubscr...@googlegroups.com>.
> 
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/elixir-lang-core/CAJhqboH_tYYRPFWf8HuVJru5phmOmU7tK_PDWVca36mUfWhJ8Q%40mail.gmail.com
>  
> <https://groups.google.com/d/msgid/elixir-lang-core/CAJhqboH_tYYRPFWf8HuVJru5phmOmU7tK_PDWVca36mUfWhJ8Q%40mail.gmail.com?utm_medium=email&utm_source=footer>.
> For more options, visit https://groups.google.com/d/optout 
> <https://groups.google.com/d/optout>.
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "elixir-lang-core" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to elixir-lang-core+unsubscr...@googlegroups.com 
> <mailto:elixir-lang-core+unsubscr...@googlegroups.com>.
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/elixir-lang-core/CAONCvEwH7a8GzHtQb78gGo0H95BJVxq8KPAcvGy3cZKYXr9nGA%40mail.gmail.com
>  
> <https://groups.google.com/d/msgid/elixir-lang-core/CAONCvEwH7a8GzHtQb78gGo0H95BJVxq8KPAcvGy3cZKYXr9nGA%40mail.gmail.com?utm_medium=email&utm_source=footer>.
> For more options, visit https://groups.google.com/d/optout 
> <https://groups.google.com/d/optout>.
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "elixir-lang-core" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to elixir-lang-core+unsubscr...@googlegroups.com 
> <mailto:elixir-lang-core+unsubscr...@googlegroups.com>.
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/elixir-lang-core/CAAHw6CLuxuNsnk-JWCTPtCr4_fsQG13eUQC3ajW5Ca2LkWwdLQ%40mail.gmail.com
>  
> <https://groups.google.com/d/msgid/elixir-lang-core/CAAHw6CLuxuNsnk-JWCTPtCr4_fsQG13eUQC3ajW5Ca2LkWwdLQ%40mail.gmail.com?utm_medium=email&utm_source=footer>.
> For more options, visit https://groups.google.com/d/optout 
> <https://groups.google.com/d/optout>.
> 
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "elixir-lang-core" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to elixir-lang-core+unsubscr...@googlegroups.com 
> <mailto:elixir-lang-core+unsubscr...@googlegroups.com>.
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/elixir-lang-core/CAGnRm4Ji7kAjv5i4_04AVp-hae4ghj1DgZx1zr%2B4LyGBYpj5_A%40mail.gmail.com
>  
> <https://groups.google.com/d/msgid/elixir-lang-core/CAGnRm4Ji7kAjv5i4_04AVp-hae4ghj1DgZx1zr%2B4LyGBYpj5_A%40mail.gmail.com?utm_medium=email&utm_source=footer>.
> For more options, visit https://groups.google.com/d/optout 
> <https://groups.google.com/d/optout>.

-- 
You received this message because you are subscribed to the Google Groups 
"elixir-lang-core" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to elixir-lang-core+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/elixir-lang-core/CB03E2AC-D33B-4833-AFD4-F4E7250B3C97%40gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to