Skip to content

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

@antonkalinin-ml

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 по умолчанию, вопроса нет. Мне кажется, это надо спустить куда-то на джуна, это хоть и мелкая, но важная часть языка, которая может стать ловушкой, если о ней не знать.

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