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
>     <javascript:>> 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
>         
> <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
>         
> <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
>         <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
>         
> <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
>         
> <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 <javascript:>.
>         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-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/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/aa4c817e-e8a4-2751-8960-9961bc572403%40resilia.nl.

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to