Skip to content

jun3/haskell: исправление laziness #309

Open

Description

@antonkalinin-ml

Прочее:

  • Вопрос What is a "rank" of a function? на сдаче предложили убрать или переформулировать. Точное определение ранга слишком сложное и на практике неполезно. В доках ghc есть примеры функций разного ранга, но это примеры, а не определение. На практике, я думаю, нам требуется лишь различать функции первого и не первого ранга. Я бы спросил: что такое функции высшего ранга?

Laziness:

  • добавить thunk:thunk в список выражений, для которых надо определить, в какой они форме
  • в вопросе Why strict functions in Haskell evaluate values to WHNF and not NF? нужно переделать строгие функции в функции при включенном расширении Strict. Это не одно и то же.
  • Make examples when bang pattern has less power, than it could be supposed - непонятно, что имеется в виду. Я бы спросил: до какой формы вычисляет bang pattern? В каком объеме вычислится список x в паттерне f !x?
  • мне не нравится обилие синонимов стратегий вычисления/редукции: outside in, outermost, normal - это все одна стратегия. normal не встречал в источниках jun3, но вообще она так тоже называется. Стратегия вызова и стратегия вычисления - в чем разница? Вроде ни в чем. Вот между вычислением и редукцией разница есть. Синонимы раздражают, потому что первое время кажется, что разница есть, а я просто ее не замечаю, приходится перечитывать текст по 10 раз и искать детали. Но я не знаю, что с этим сделать, так как эти термины встречаются в источниках. Мы хотели проредить источники, может тогда и получится.
  • Добавить вопрос про (a+b) ``seq`` expr.
  • Убрать подсказку про lazy let из вопроса There is a ! inside a Maybe, which is inside a let expression, and let expressions are lazy: let (Just !a) = x in 1 + 1
  • добавить вопрос, выявляющий знание, что let/where top level pattern bindings являются irrefutable. Не целиком irrefutable, а только верхний уровень. И where это тоже касается, хотя в Haskell Report их называют let-bound pattern bindings. Это единственный случай, когда паттерны irrefutable по умолчанию, без знака ~. Вопрос про irrefutable patterns есть на мидле, но когда они irrefutable по умолчанию, вопроса нет. Мне кажется, это надо спустить куда-то на джуна, это хоть и мелкая, но важная часть языка, которая может стать ловушкой, если о ней не знать.

Activity

  1. Znack commented on Apr 8, 2021

    @Znack
    Contributor

    Про определения и синонимы: может в начале явно дисклеймер написать, что считаем синонимами, а что нет? И по тому, что нет сразу вопросы добавить чем их разница?

  2. antonkalinin-ml commented on Apr 8, 2021

    @antonkalinin-ml
    ContributorAuthor

    И по тому, что нет сразу вопросы добавить чем их разница?

    Такой вопрос есть, о разнице между стратегией вычисления и стратегией редукции.

    Про определения и синонимы: может в начале явно дисклеймер написать, что считаем синонимами, а что нет?

    Т.е. написать, что термины A, B, C это одно и то же? Я не уверен, что это общая проблема, а не лично моя :). Хотел сперва узнать мнение других.

  3. Znack commented on Apr 8, 2021

    @Znack
    Contributor

    Я не уверен, что это общая проблема, а не лично моя :). Хотел сперва узнать мнение других.

    Ну в целом про такого рода проблемы мне много раз говорили и фронтендеры, у них темы другие, а проблемы те же :) Поэтому я уже сразу могу сказать, что проблема актуальна и её решение — полезная штука

  4. olgaklimenko commented on Apr 12, 2021

    @olgaklimenko
    Contributor

    Это общая проблема :) Список синонимов мне бы очень помог при подготовке)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

backendRelated to back-end developer roadmap

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions