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 <javascript:>. > 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.