[erlang-questions] New project: ZJ - A tiny JSON encoder/decoder

Jesper Louis Andersen jesper.louis.andersen@REDACTED
Thu Jun 28 13:15:10 CEST 2018


On Thu, Jun 28, 2018 at 6:50 AM Dmitry Belyaev <be.dmitry@REDACTED> wrote:

> I could never understand where this conversion JSON null <-> Erlang
> undefined was coming from.
>
> Of course we generally don't use null atom in the code, but I always
> considered "undefined" value in Erlang meaning "absent" value. For example
> when a record is created and some field is not populated explicitly, it is
> set undefined.
>

​Both variants are somewhat valid: Common Lisp generally treats NIL as the
false value, the empty list, null, ... whereas other languages makes the
distinction: [], false and null are different things in Erlang for instance.

In a statically typed language, you probably would split them. In
particular you would have

type void
type unit = ()
type json = Int of int | String of string | ...  | Null
​
​Where 'void' is the uninhabitable type which can never be realized in a
program​, 'unit' is the type of one result (and only that result) and a
Null is something of type json.

In Erlang, undefined often corresponds to the unit type. It isn't the same
as void, because in Erlang every term has to return a value, and you cannot
return something of type void.

The tradeoff in the end is that of convenience: null == undefined means you
can share some data, but you then lost the ability to discriminate null and
undefined which from a type/class perspective might be desirable.



-- 
J.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20180628/18c6d499/attachment.htm>


More information about the erlang-questions mailing list