Hi, 
thanks for the suggestion, but I think you are answering to a different 
problem than the one I had in mind, I'll try to be more clear to avoid 
confusion.
In my use case, I have a lot of fields, which usually can be kept with 
their default values, but some of them aren't. So not all customers need 
names. Maybe a better example of the code I want to write would be:

type alias Customer =
  { id : Int,
    name : String ,
    occupation : String,
    nickname : String,
    height : Float,
    -- Lots of other stuff
  }


defaultCustomer : Int -> Customer
defaultCustomer id =
  { id = id,
   name = "",
   occupation = "",
   nickname "N/A",
   height : 1.6,
    -- lots of other initialization
  }

[ 
  { (defaultCustomer 1) | name = "Smith", occupation = "Clerk" },
  { (defaultCustomer 2) | name = "Jones" }
  { (defaultCustomer 3) | nickname = "R2-D2", height = 0.5 }
]



Martin




On Monday, 12 September 2016 17:50:21 UTC+2, Nick H wrote:
>
> In this case, I think the best thing to do would be to make a construction 
> function that takes a name as well as an id.
>
> defaultCustomer : Int -> String -> Customer
> defaultCustomer id name =
>   { id = id,
>   , name = name,
>    -- lots of other initialization
>   }
>
> You constructor function should never return an incomplete/invalid record. 
> If your customers always need names, make sure they always get names!
>
>
>
> On Sun, Sep 11, 2016 at 4:44 AM, Martin Cerny <[email protected] 
> <javascript:>> wrote:
>
>> Hi,
>> hope its polite to bump up an old thread like this - if not, please 
>> accept my apologies. I have been struggling with the record update syntax 
>> for a while and wanted to share another use case which I think could be 
>> made better.
>> So let's say I want to populate a list of objects of the same type which 
>> have a lot of properties, most of which are kept default, e.g.
>>
>> type alias Customer =
>>   { id : Int,
>>     Name : String ,
>>     -- Lots of other stuff
>>   }
>>
>> and I have a "constructor" function to build instances with default 
>> values, but never forget to fill in the id, e.g.
>>
>> defaultCustomer : Int -> Customer
>> defaultCustomer id =
>>   { id = id,
>>    Name = "",
>>    -- lots of other initialization
>>   }
>>
>> now I would like to write things like
>> [ 
>>   { (defaultCustomer 1) | Name = "Smith" },
>>   { (defaultCustomer 2) | Name = "Jones" }
>> ]
>>
>> Which is not possible.
>>
>> Now I have two options:
>> a) do not use a "constructor" and always write the records in full (not 
>> nice since they have a lot of fields which are mostly left default)
>> b) just have a template defaultCostumer : Customer and hope I will never 
>> forget to fill in the id (used in messages)
>> c) have a long "let" clause before defining the list
>>
>> Neither of which seems nice.
>>
>> I'll probably go with b), but if anyone has a nice suggestion how to 
>> enforce filling in a record in this way with the current syntax it would be 
>> very welcome.
>>
>> And thanks for the work on elm - I am learning it and having fun with it!
>>
>> Martin
>>
>>
>>
>>
>>
>>  but I tried to figure out where on GitHub should this be discussed and 
>> kind of failed...
>> (is it https://github.com/elm-lang/elm-plans/issues/16 or 
>>
>> On Saturday, 26 July 2014 18:08:22 UTC+2, Jeff Smits wrote:
>>>
>>> Yeah, I really want this feature. But I guess I forgot about the "code 
>>> comparison". 
>>>
>>> @Evan: can you say more concretely what kind of code comparison you want 
>>> to see before moving forward on this feature?
>>>
>>> On Sat, Jul 26, 2014 at 2:26 PM, David Sargeant <[email protected]> 
>>> wrote:
>>>
>>>> Seems a little strange that the following does not work:
>>>>
>>>> { {} | attrs = [1] }
>>>>
>>>> I know it's not really useful, but I guess it goes back to the issue of 
>>>> allowing arbitrary expressions to the left of the vertical bar.
>>>>
>>>> -- 
>>>> 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] <javascript:>.
>> 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