My counterpoint is this. Any time you can name a concept that makes it easier to see what's going on, it's important.
Examples: * Create back padding of four blank table cells * use with Stream.repeatedly and take, for example, to initialize a data structure for OTP. I do these two things with pretty good frequency because I build responsive layouts often needing tabular structure, but without HTML tables. Say you are laying out tables that are responsive but without HTML tables. You d want to add padding to the end of uneven rows. To create the padding you'd do Stream.repeatedly( fn -> :padding end) |> Enum.take(4) where :padding is the constant padding you want. This pattern comes up with some regularity in my user interfaces. It doesn't hurt anything, and it would be a great addition to the function module. I like this proposal. This is exactly the kind of function you'd expect to see in the module. +1 from me. -bt On Sun, Feb 2, 2020 at 2:42 PM Jesse Claven <jesse.cla...@gmail.com> wrote: > That all makes sense! I would say that in Elm it's used somewhat > frequently. I don't have access to the previous code that I worked on > (changed jobs), so unfortunately I'm unable to grep for `always` to find > some good examples. > > In the codebase at my new job, there's a couple of places where `fn _ -> > something` is (my original example in this thread). It's basically for > anywhere you'd want to ignore some value, and always return something else. > I tried searching through GitHub for that code sample but the search > functionality was a little subpar. > > I understand about keeping the stdlib small, but for a relatively small > function, and one that's considered "table stakes" in most FP languages, > perhaps it would be a good fit? > > On Thursday, 30 January 2020 11:20:58 UTC, Wiebe-Marten Wijnja wrote: >> >> The reason `Function.identity/1` was added after it was requested many >> times previously, was that at some point everyone agreed that it would >> improve Elixir's documentation, because it is easier to search for than >> `&(&1)`. >> >> The `const` pattern is much less wide-spread. In e.g. Haskell it sees >> some use in places where it is the single (or at least by far the simplest) >> way to make things typecheck in a pure functional environment. >> >> In Elixir, I suspect that it would be used much less commonly. The fact >> that our functions contain statements that are executed from top to bottom >> and rebindable variable names means that we are even less likely to use it >> anywhere. >> >> As such, I don't think `const` is a function that is important enough to >> include in the standard library. >> >> >> Of course, I'm very much open to evidence of the contrary ^_^. Do you >> have any example code of where you'd see `const` being useful? >> >> >> ~Marten/Qqwy >> On 30-01-2020 10:24, Jesse Claven wrote: >> >> Hey Amos, >> >> Ah that's right. Every now and then I'm reminded that Elixir doesn't >> support currying when I try to do something haha Your suggestion makes >> sense. >> >> Would there be any downsides to having it, even if it isn't the most >> incredible function? Again to call on the `Function.identity/1`, and it's >> discussion, it's useful when it's useful for concise and semantic code. >> >> On Wednesday, 29 January 2020 22:43:51 UTC, Amos King - Binary Noggin >> wrote: >>> >>> Jesse, >>> >>> I see where you are going, but Elixir doesn't have currying. For >>> instance, the last example you gave will return an error. >>> >>> You could make it work by changing it a bit. >>> >>> `@spec const(a) :: fn(any() -> a) when a: var` >>> >>> So, const would return an fn instead of taking two arguments. I don't >>> know how useful that would be in the long run. I know it is common in >>> function programming, but I don't see it being extremely helpful in Elixir. >>> >>> I'm ready to be convinced. >>> >>> Cheers, >>> >>> Amos King >>> CEO >>> Binary Noggin >>> http://binarynoggin.com #business >>> https://elixiroutlaws.com #elixir podcast >>> http://thisagilelife.com #podcast >>> >>> ======================================================= >>> I welcome VSRE emails. Learn more at http://vsre.info/ >>> ======================================================= >>> >>> >>> >>> On Wed, Jan 29, 2020 at 4:01 PM Jesse Claven <jesse...@gmail.com> wrote: >>> >>>> Hey everyone! >>>> >>>> I propose adding `Function.const/2` as a function which for argument >>>> `x`, would always return `x`. >>>> >>>> ``` >>>> @spec const(any(), any()) :: any() >>>> def const(_original_value, new_value), do: new_value >>>> ``` >>>> >>>> This is somewhat similar to the new `Function.identity/1` in that it >>>> may seem like we've easily lived without it, but it does afford some more >>>> concise/semantic ways to represent a common pattern. >>>> >>>> ``` >>>> fn _ -> something_else() end >>>> ``` >>>> >>>> This would become: >>>> >>>> ``` >>>> const(something_else()) >>>> ``` >>>> >>>> ``` >>>> Enum.map([0,1,2,3], &Function.const/2) >>>> ``` >>>> >>>> I'm new to Elixir, so I'm not sure of the weight that the name `const` >>>> would carry, so there could be a more acceptable name. >>>> >>>> If accepted, I'd be happy to create a PR! >>>> >>>> Equivalents in other languages: >>>> >>>> - Haskell: >>>> https://hackage.haskell.org/package/base-4.12.0.0/docs/Data-Function.html#v:const >>>> - PureScript: >>>> https://pursuit.purescript.org/packages/purescript-const/4.1.0/docs/Data.Const >>>> - Elm: >>>> https://package.elm-lang.org/packages/elm/core/latest/Basics#always >>>> - Scala: >>>> https://www.scala-lang.org/api/current/scala/Function$.html#const[T,U](x:T)(y:U):T >>>> - Idris: >>>> https://www.idris-lang.org/docs/current/prelude_doc/docs/Prelude.Basics.html#Prelude.Basics.const >>>> >>>> Thanks for your time. >>>> >>>> -- >>>> 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-l...@googlegroups.com. >>>> To view this discussion on the web visit >>>> https://groups.google.com/d/msgid/elixir-lang-core/576949a3-93e2-4117-b1f1-ab4621f10e88%40googlegroups.com >>>> <https://groups.google.com/d/msgid/elixir-lang-core/576949a3-93e2-4117-b1f1-ab4621f10e88%40googlegroups.com?utm_medium=email&utm_source=footer> >>>> . >>>> >>> -- >> 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-l...@googlegroups.com. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/elixir-lang-core/f8b6009d-e21a-434a-96e0-e2c6ae3c1a0e%40googlegroups.com >> <https://groups.google.com/d/msgid/elixir-lang-core/f8b6009d-e21a-434a-96e0-e2c6ae3c1a0e%40googlegroups.com?utm_medium=email&utm_source=footer> >> . >> >> -- > 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/294d4f77-6b91-4316-a152-0c209fad12db%40googlegroups.com > <https://groups.google.com/d/msgid/elixir-lang-core/294d4f77-6b91-4316-a152-0c209fad12db%40googlegroups.com?utm_medium=email&utm_source=footer> > . > -- Regards, Bruce Tate CEO <https://bowtie.mailbutler.io/tracking/hit/f8218219-d2a8-4de4-9fef-1cdde6e723f6/c7c97460-016e-45fb-a4ab-0a70318c7b97> Groxio, LLC. 512.799.9366 br...@grox.io grox.io -- 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/CAFXvW-6%3DfheYjjyQ7xiWYkP0B0t%2BfoGae9OGtkDDSvSpD4s_Sg%40mail.gmail.com.