The Elm equivalent if it existed would probably be:

.name= : String -> Person -> Person


I have certainly written plenty of code where I would have appreciated this
but I do also worry that treating the fields in a record like this tends to
encourage imperative thinking and discourage thinking about the validity of
the record as a whole.

Mark

On Sun, Aug 28, 2016 at 4:32 PM, John Mayer <[email protected]> wrote:

> For the purpose of comparison, this reminds me of a feature of case
> classes in Scala. Case classes are somewhat similar to records in that they
> can be succinctly defined as just some named fields. By default, they have
> a copy method which each field can be provided optionally and override the
> value of the input.
>
> One cool idea would be to have a sort of copy keyword which takes two
> records where one is a field-unifiable-subset of the other. However this
> probably can't be defined generally in plain Elm because the type system
> doesn't support this notion of subsets.
>
> Maybe you could write a preprocessor which expanded the keyword into a
> lambda by inspecting the input and update records. This approach could even
> delegate the type checking to the type checker and just rely on the syntax
> tree.
>
> You could write a code generator which created methods which act like
> copy, one for each field, or one big one where each field was a Maybe type.
>
> On Aug 28, 2016 6:50 PM, "Joey Eremondi" <[email protected]> wrote:
>
>> There have been requests for this before. I personally think they'd be
>> great, but there's not a current way to do it other than lambda.
>> On Aug 28, 2016 2:42 PM, "Esad Hajdarevic" <[email protected]> wrote:
>>
>>> Hi,
>>>
>>> with the current Elm syntax, is there a way to partially apply a record
>>> update? Something like
>>>
>>> type alias Person = { name: String, age: Int }
>>>
>>> p = { name: "Joe", age: 32 }
>>>
>>> p.name= :: String -> Person
>>>
>>> or
>>>
>>> { p | name = } :: String -> Person
>>>
>>> or even
>>>
>>> { p | name =, age = 30} :: String ->  Person
>>>
>>> I'm asking because I'd like to update a record in a pipeline. Wrapping
>>> in a lambda \x -> { p | name = x } works, but I was wondering if there
>>> could be a more compact way of doing this.
>>>
>>>
>>>
>>>
>>> --
>>> 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