It's not quite what you asked for, but Kris Jenkins' Formatting[0] library
does some interesting stuff with variadic functions. In that library, the
`print` function's arity depends on the value of its first argument.

Here's the idea applied to this problem (code lifted straight from the
Formatting library)[1]. The number of arguments taken by the `sum` function
(and their types!) is determined by the `Sum r a` object you pass as the
first argument. You construct a `Sum r a` object by joining up `i`s (when
you want to pass an `Int`) and `f`s (when you want to pass a `Float`) using
the composition operator `<>`.

[0]
http://package.elm-lang.org/packages/krisajenkins/formatting/4.2.0/Formatting
[1] https://ellie-app.com/rpJq3K6Lra1/0

On Tue, 7 Nov 2017 at 04:50 Ray Toal <[email protected]> wrote:

> I like the calls and resolves! Nice.
>
>
> On Monday, November 6, 2017 at 8:45:48 PM UTC-8, David Andrews wrote:
>
>> Sorry I misread your example as a single list argument.
>>
>> Strictly speaking, you can not call a function with no arguments in Elm,
>> but some functions take Unit as an argument.
>>
>> There are a couple of roadblocks preventing this exact functionality in
>> Elm.  Firstly, Elm does not allow recursive types
>> <https://ellie-app.com/5YDsxhFLSa1/0>.  Secondly, a name in Elm must
>> have the same type everywhere it is mentioned.  Even normal function
>> overloading is not possible <https://ellie-app.com/5YDsxhFLSa1/1>
>> without renaming the function.
>>
>> The closest I could come up with was this
>> <https://ellie-app.com/g4DpfMDxPa1/1>, which I don't think will be very
>> satisfactory to you, but I believe is isomorphic to the Haskell example.
>> You just have to explicitly name all of the function applications in Elm.
>>
>>
>> On Nov 6, 2017 11:53 AM, "Ray Toal" <[email protected]> wrote:
>>
>> Thanks but I was looking not for the obvious, practical approach for
>> summing integers but was interested in the puzzle of arbitrary-length
>> currying. When called with no arguments, the function should yield its sum
>> so far. When called with a single argument, the function should return a
>> function that knows about what it has seen so far. It sounds stateful, but
>> can be done without state. But since Elm is statically typed and doesn't
>> have overloading, I'm wondering if this can even be done with currying.
>>
>>
>> On Monday, November 6, 2017 at 4:23:21 AM UTC-8, David Andrews wrote:
>>
>>> The solution for the list version is very straightforward in elm:
>>> https://ellie-app.com/g4DpfMDxPa1/0
>>>
>>> On Sun, Nov 5, 2017 at 10:39 PM, Ray Toal <[email protected]> wrote:
>>>
>>>> There's an interesting problem on the Programming Puzzles and Stack
>>>> Exchange on arbitrary length currying here:
>>>> https://codegolf.stackexchange.com/questions/117017/arbitrary-length-currying.
>>>> It asks for a function f behaving as follows:
>>>>
>>>>     f () = 0
>>>>     f (3)(9)(2)() = 14
>>>>
>>>> This is trivial in dynamically typed languages that don't care about
>>>> the number of arguments, and is easy to do in statically typed languages
>>>> which allow overloading. But what about the ML-like languages?
>>>>
>>>> The only ML-like language with a solution is Haskell. Its author says 
>>>> "Forcing
>>>> Haskell's strict type system to allow this requires some magic, namely,
>>>> enabling the GHC extension for flexible typeclass instances."
>>>>
>>>> Is this problem impossible in Elm?
>>>>
>>>> If impossibie, can a solution be found to a related problem, say where
>>>> the arguments are lists?, e.g.
>>>>
>>>>     f [] = 0
>>>>     f [3] [9] [2] [] = 14
>>>>
>>>>
>>>>
>>>> --
>>>> You received this message because you are subscribed to the Google
>>>> Groups "Elm Discuss" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send
>>>> an email to [email protected].
>>>>
>>>> For more options, visit https://groups.google.com/d/optout.
>>>>
>>>
>>> --
>> You received this message because you are subscribed to the Google Groups
>> "Elm Discuss" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to [email protected].
>> For more options, visit https://groups.google.com/d/optout.
>>
>>
>> --
> You received this message because you are subscribed to the Google Groups
> "Elm Discuss" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups "Elm 
Discuss" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to