[erlang-questions] The compiler "eats" structures which are not separated by commas

Jan Burse janburse@REDACTED
Sat Apr 21 23:04:55 CEST 2012


Vlad Dumitrescu schrieb:
>>>> The compiler "eats" structures which are not separated by commas.
>>>> start() ->
>>>>      [
>>>>       #haha{v=1}   %% No comma here
>>>>       #haha{v=2}   %% No comma here
>>>>       #haha{v=3}
>>>>      ].
>>>
>>> No, the code is equivalent to ((#haha{v=1})#haha{v=2})#haha{v=3}.

Maybe adopt some technique from La La Land:

Step I:

- Distinguish constructor and setter, instead of

      Constructor: #Name{Field1=Expr1,...}
      Setter: Expr#Name{Field1=Expr1,...}
      Getter: Expr#Name.Field

   Use different syntactic forms, i.e. for example:

      Constructur: #Name{Field1=Expr1,...}
      Setter: Expr #setName{Field1=Expr1,...}
      Getter: Expr #getName.Field

Step II

- Use type inference, to deduce the record typ, instead of

      Constructur: #Name{Field1=Expr1,...}
      Setter: Expr #setName{Field1=Expr1,...}
      Getter: Expr #getName.Field

   One can use the abbreviated forms:

      Constructur: #Name{Field1=Expr1,...}
      Setter: Expr #set{Field1=Expr1,...}
      Getter: Expr #get.Field

   Or maybe even better:

      Constructur: #Name{Field1=Expr1,...}
      Setter: Expr #setField(Expr1) #...
      Getter: Expr #getField()

Actually I don't know if a sufficient type inference
could be realized for Erlang so that the above
would work.

Bye




More information about the erlang-questions mailing list