Size: a a a

Compiler Development

2020 January 10

AT

Alexander Tchitchigin in Compiler Development
Алексей
ну собственно они там названы declarations
Вот во врезке дальше показывается, как эти выражения дешугарятся. Повторю здесь:
let { val1 = e1; val2 = e2 } in e0 => let (val1, val2) = (e1, e2) in e0

Так понятнее?
источник

А

Алексей in Compiler Development
и что?
источник

G

GG in Compiler Development
Alexander Tchitchigin
Вот во врезке дальше показывается, как эти выражения дешугарятся. Повторю здесь:
let { val1 = e1; val2 = e2 } in e0 => let (val1, val2) = (e1, e2) in e0

Так понятнее?
это же просто  let in в одну строчку
источник

AT

Alexander Tchitchigin in Compiler Development
Алексей
собственно дальше там есть описание do
do
 stmt1;
 stmt2;
 stmt3
=>
((stmt1 >> stmt2) >> stmt3)

Понятно, что вызов функции (оператора) - это expression?
источник

А

Алексей in Compiler Development
но синтаксически это всё равно statements и declarations
источник

AT

Alexander Tchitchigin in Compiler Development
GG
это же просто  let in в одну строчку
Именно. А "let в одну строчку" - это expression.
QED.
источник

G

GG in Compiler Development
Alexander Tchitchigin
Именно. А "let в одну строчку" - это expression.
QED.
+
источник

А

Алексей in Compiler Development
сам let in в совокупности вообще expression
источник

AT

Alexander Tchitchigin in Compiler Development
Алексей
но синтаксически это всё равно statements и declarations
LOL. Ну, если Вам так легче жить... 😂
источник

AT

Alexander Tchitchigin in Compiler Development
Алексей
сам let in в совокупности вообще expression
👏
источник

А

Алексей in Compiler Development
Алексей
сам let in в совокупности вообще expression
что не слишком мешает ему состоять из declarations
источник

А

Алексей in Compiler Development
(а do из statements)
источник

AT

Alexander Tchitchigin in Compiler Development
😂
источник

AT

Alexander Tchitchigin in Compiler Development
Почему-то вспоминается присказка про "божью росу", простите, пожалуйста...
источник

А

Алексей in Compiler Development
я не знаю с чем тут можно спорить, если в доке haskell.org уже описано что такое statement
источник

МБ

Михаил Бахтерев in Compiler Development
Alexander Tchitchigin
do
 stmt1;
 stmt2;
 stmt3
=>
((stmt1 >> stmt2) >> stmt3)

Понятно, что вызов функции (оператора) - это expression?
Так оно, собственно, и в Сишечке так. Просто на момент формулировки Сишечки об этом так не думали. Только Moggi открыл всем глаза
источник

AT

Alexander Tchitchigin in Compiler Development
Алексей
я не знаю с чем тут можно спорить, если в доке haskell.org уже описано что такое statement
Statements внутри do-expression, которые обязательно заканчиваются expression и дешугарятся в цепочку вызовов функций? Действительно, с чем тут спорить? 😉
источник

А

Алексей in Compiler Development
Alexander Tchitchigin
Это потому что в Haskell statements нет - поэтому всегда все лямбды из одного выражения состоят. 😃
Вот тут написано, что statements нет.
источник

А

Алексей in Compiler Development
Алексей
да вроде есть же
вот тут я написал что всё таки есть
источник

AT

Alexander Tchitchigin in Compiler Development
Михаил Бахтерев
Так оно, собственно, и в Сишечке так. Просто на момент формулировки Сишечки об этом так не думали. Только Moggi открыл всем глаза
Только в сишечке оно не дешугарится и семантика ; фиксирована. А так-то - да, конечно. Как в анекдоте про армянское радио. 😊
источник