Actually, we could get rid of the keyword entierly :

Faz = (Int, Int)
Faz : ø

Fiz = { name : String, age : Int }
Fiz : ø

Fuz a = { a | age : Int }
Fuz : ø

Foo
  = Foo
  | Bar Int
  | Baz (String, String)
*  | Biz { name : String, age : Int }*
*  | Buz Fiz*


*  | Boz (Fuz { name : String })*Foo : Foo
Bar : Int -> Foo
Baz : String -> String -> Foo

*Biz : String -> Int -> Foo**Buz : String -> Int -> Foo*




*Boz : String -> Int -> FooDoo a =... *
On Monday, January 16, 2017 at 1:43:02 PM UTC+1, Maxime Dantec wrote:
>
> Thanks for the answers, I had indeed made some poor choices of word in my 
> first email :(
>
> Just before this thread dies, and out of the blue : What if...
>
> - type alias never generates a constructor (change: records do not have 
> ctors)
> - type always generate an "expanded" ctor
>
> expanded as in :
>
> type alias Faz = (Int, Int)
> Faz : ø
>
> type alias Fiz = { name : String, age : Int }
> Fiz : ø
>
> type alias Fuz a = { a | name : String }
> Fuz : ø
>
> type Foo
>   = Foo
>   | Bar Int
>   | Baz (String, String)
> *  | Biz { name : String, age : Int }*
>
> *  | Buz Fiz*
> Foo : Foo
> Bar : Int -> Foo
> Baz : String -> String -> Foo
>
>
> *Biz : String -> Int -> FooBuz : String -> Int -> Foo*
> On Monday, January 16, 2017 at 6:56:52 AM UTC+1, Max Goldstein wrote:
>>
>> * rereads * Janis, you are incredibly good at telling people that they're 
>> wrong.
>>
>> Ah, I got caught up in the third paragraph about the native 
>> representation, and thought that those were Elm records, not JavaScript 
>> objects.
>>
>> Also, the phrase "No type value has more than one value", for all of its 
>> bold redness, reads perilously close to "no type has more than one tag".
>>
>> However, I think there's some value in pointing out the legitimacy of 
>> tags that have no arguments: under the proposal, union tags would still 
>> have either one argument or none, just not more than one. One of the more 
>> confusing parts of union types is that different tags can be functions of 
>> different arities or non-function values, depending on how they are 
>> defined. If we wanted to eliminate this confusion, we could require an 
>> arity of exactly one, and tags like Up and Down would need to be Up () and 
>> Down ().
>>
>> But that's needlessly confusing, so limiting the number of tags to one 
>> seems more like a restriction than a simplification. Yes, you've found a 
>> way to make a strictly smaller language without diminishing expressive 
>> power. The same is true for requiring f x y = ... to be written as f = \ x 
>> y -> ... but no one is advocating for that.
>>
>> So, I'm sorry I misunderstood your proposal and lectured on things you 
>> may well have known about. And for what it's worth, I've used two-argument 
>> constructors before, and I've advocated for records instead of positional 
>> arguments before. I think this is a place where we can allow some freedom 
>> to the programmer.
>>
>>

-- 
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