Size: a a a

Elm Lang сообщество разработчиков

2020 October 15

K

Kir in Elm Lang сообщество разработчиков
Вопрос, в Эльме let - это let rec?
источник

K

Kir in Elm Lang сообщество разработчиков
Позволяет mutual recursion для функций, но не для значений. Что, в общем-то, логично. Приятно, что Эльм выполняет анализ зависимостей для let-объявлений, позволяя
test : Int
test =
 let
   y = x
   x = 1
 in y
источник

AY

Alexey Yurchenko in Elm Lang сообщество разработчиков
А что тут анализировать? Там же просто граф разматывается и ошибка, если не сошлось. Это же не императивный язык
источник

AY

Alexey Yurchenko in Elm Lang сообщество разработчиков
Kir
Позволяет mutual recursion для функций, но не для значений. Что, в общем-то, логично. Приятно, что Эльм выполняет анализ зависимостей для let-объявлений, позволяя
test : Int
test =
 let
   y = x
   x = 1
 in y
оно точно так же работает в haskell же
источник

K

Kir in Elm Lang сообщество разработчиков
Alexey Yurchenko
оно точно так же работает в haskell же
Хаскелль не имеет ничего против рекурсивных значений.
источник

AY

Alexey Yurchenko in Elm Lang сообщество разработчиков
А можно пример рекурсивных значений? Сообразить не могу
источник

K

Kir in Elm Lang сообщество разработчиков
ones = 1 : ones
источник

AY

Alexey Yurchenko in Elm Lang сообщество разработчиков
ок, то, что в хаскеле бесконечные массивы норма я знаю, насчет elm даже не задумывался. А бесконечные массивы вытекают из возможности устроить рекурсию значений походу
источник

K

Kir in Elm Lang сообщество разработчиков
Это список, а не массив. В хаскелле при желании можно слелать бесконечные деревья и всё, что угодно.
источник

AY

Alexey Yurchenko in Elm Lang сообщество разработчиков
массив - оговорился
источник

K

Kir in Elm Lang сообщество разработчиков
Так-то их можно и в эльме сделать, через
type List a = List (() -> Either (a, List a) ())

например. Это не совсем эффективная реализация, да и от ленивости одно название.
источник

AY

Alexey Yurchenko in Elm Lang сообщество разработчиков
Ну это тип, а не значение
источник

AY

Alexey Yurchenko in Elm Lang сообщество разработчиков
про деревья в хаскеле понял
источник

K

Kir in Elm Lang сообщество разработчиков
repeat x = List <| \() -> (x, repeat x)

head (LIst thunk) = case thunk () of
 | Left (x, _) -> Just x
 | Right () -> Nothing

tail (LIst thunk) = case thunk () of
 | Left (_, xs) -> Just xs
 | Right () -> Nothing

Вот например repeat 1 - бесконечный (в терминах head/tail) список единиц.
источник

K

Kir in Elm Lang сообщество разработчиков
"Бесконечные" объекты вытекают из того, что все значения в хаскелле вычисляются только когда нужны. Поэтому можно внутри вычисления сослаться на его результат
источник

AY

Alexey Yurchenko in Elm Lang сообщество разработчиков
Я понимаю, как это происходит в хаскеле. Гуглил почему в elm не так, особо не гуглится
источник

AY

Alexey Yurchenko in Elm Lang сообщество разработчиков
Единственное что гуглится
https://github.com/elm/compiler/blob/master/hints/bad-recursion.md
Звучит как "это сложно, путает, забейте" 😁 Нам это просто не нужно (как и интеграция с другими либами 😁)
источник

MP

Max P in Elm Lang сообщество разработчиков
Всем привет. Когда у вас на проекте появляется циклическая зависимость, о чем это обычно говорит? модули плохо структурированы или может еще какая подсказка кроется в этой ошибке?
источник

AY

Alexey Yurchenko in Elm Lang сообщество разработчиков
Max P
Всем привет. Когда у вас на проекте появляется циклическая зависимость, о чем это обычно говорит? модули плохо структурированы или может еще какая подсказка кроется в этой ошибке?
Отсутствие структуризации. Код на два файла просто поделили 😁
источник

AP

Aleksei (astynax) Pi... in Elm Lang сообщество разработчиков
Да, обычно это говорит о том, что "передекомпозировали"
источник