Skip to content

Junior-3. Haskell - Extensions #291

Closed

Description

@olegromashin

В результате сдачи экстеншенов накопилось несколько исправлений, которые хотелось бы внести.

  1. Убрать раздел Types, в котором сейчас 1 вопрос: "Что такое кайнд?". Это спрашивается в DataKinds, хотя там про конкретный кайнд *, а здесь общий вопрос. Можно и перенести.
  2. Добавить DerivingVia в часть с Deriving.
  3. Добавить источник в Type and Data Families: https://stackoverflow.com/questions/49433716/why-cant-we-define-closed-data-families

Will be continued...

Activity

  1. vkpgwt commented on Feb 28, 2021

    @vkpgwt
    Contributor
    • предлагаю добавить ссылку в раздел гадтов об их связи с тайпклассами: https://stackoverflow.com/questions/10994508/gadts-vs-multiparamtypeclasses
    • RankNTypes и экзистенциалы я бы поставил раньше гадтов и type families, потому что экзистенциалы упоминаются в описании гадтов и их проще понять.
    • списки литературы хорошо бы расположить поближе к соответствующим темам. Каты тоже - они в самом конце.
    • возможно, добавить ссылки про type families. Я их записал, но в итоге не понадобились:
    • вопрос про standalone deriving предлагаю поставить после гадтов и экзистенциалов. Дока по StandaloneDeriving довольно большая и описывает дерайвинг для гадтов, что важно. Поэтому до изучения гадтов читать ее менее полезно, хуже запомнится.
    • непонятен вопрос про inconvenience between term level & type level of promoted kinds. Кажется, имелось в виду, можно ли написать функцию из значений в соответствующие promoted types или наоборот. Предлагаю так и сформулировать.
    • трудно ответить на вопрос, как constraint kinds помогают generic programming, если не умеешь дженерики. Дженерики это тема на мидле. В Упрощение карты на 3го джуна #287 предложил перенести весь ConstraintKinds на мидла. Если будет решено оставить раздел как есть, тогда предлагаю удалить вопрос или переформулировать так, чтобы его было куда пристроить на мидле.
  2. vkpgwt commented on Mar 2, 2021

    @vkpgwt
    Contributor
    • Вопрос What is a "rank" of a function? предложили то ли убрать, то ли переформулировать.
  3. kelizarov commented on Mar 2, 2021

    @kelizarov
    Contributor

    суперпростой гайд, но мне не понравился, слишком мало пояснений: https://cdepillabout.github.io/haskell-type-families-presentation/#/
    еще один, но сложнее, я не дочитал. Оцените, может, понравится: https://ocharles.org.uk/blog/posts/2014-12-12-type-families.html

    Я думаю оба стоит включить, они простые и довольно просто объясняют хотя бы базово для чего тайп-фэмили. Надо бы так же добавить ссылку на доку по тайп-фэмили.

  4. vkpgwt commented on Mar 3, 2021

    @vkpgwt
    Contributor

    Предложили поправить laziness:

    • добавить thunk:thunk в список выражений, для которых надо определить, в какой они форме
    • вопрос про strict functions лучше переформулировать - тут имеются в виду функции с включенным расширением Strict.
    • Make examples when bang pattern has less power, than it could be supposed - вопрос непонятен, можно спросить о том, до какой формы вычисляется bang pattern.
  5. vkpgwt commented on Mar 11, 2021

    @vkpgwt
    Contributor

    Laziness.

    • Я запутался в куче синонимов для разных стратегий: outside in, inside out, lazy, call by value/name/need, нормальный порядок, аппликативный порядок, стратегии вызова (и чем они отличаются от стратегий вычисления?). По хорошему, достаточно 5 терминов: две редукции (нормальная, аппликативная), 2 стратегии вычисления и еще неиспользуемый call by name. А остальные термины свести к этим 5, если они обозначают то же самое.
    • Добавить вопрос про (a+b) ``seq`` expr.
    • Убрать ответ из последнего вопроса, где про Maybe :)
    • Еще нужно добавить вопрос, выявляющий знание, что let/where top level pattern bindings ленивые (irrefutable). Это единственный случай, когда паттерны ленивые по умолчанию, без знака ~. И когда узнаешь факт того, что что-то ленивое по дефолту, это очень нервирует, приходится искать, вдруг они ленивые где-нибудь еще. Возможно, это надо спрашивать даже на jun2 или 1.
  6. Znack commented on Mar 12, 2021

    @Znack
    Contributor

    Убрать ответ из последнего вопроса, где про Maybe :)

    А там это не вопрос, там это объяснение задачи :) Может просто кривая формулировка "There is a ! inside a Maybe, which is inside a let expression, and let expressions are lazy:", здесь имеется в виду, что надо обратить внимание на ! внутри паттерн матчинга и как он себя ведет учитывая, что let-ы ленивые

  7. vkpgwt commented on Mar 12, 2021

    @vkpgwt
    Contributor

    учитывая, что let-ы ленивые

    Это и есть ответ, не нужно этого писать :). "Вот есть bang pattern внутри let, форсирует ли он вычисление переменной?". Когда интервьюируемый добрался до этого вопроса, он усвоил, что bang patterns форсируют все подряд, а это вопрос-ловушка на исключение из данного правила, не надо подсказывать.

  8. Znack commented on Mar 12, 2021

    @Znack
    Contributor

    Неее, это всё таки не ответ, но то что жирный намёк я согласен :) давай уберём :)

  9. olgaklimenko commented on Mar 13, 2021

    @olgaklimenko
    Contributor
  10. olegromashin commented on Mar 22, 2021

    @olegromashin
    ContributorAuthor
    * RankNTypes и экзистенциалы я бы поставил раньше гадтов и type families, потому что экзистенциалы упоминаются в описании гадтов и их проще понять
    

    Субъективно. Мне намного труднее дались RankNTypes, я бы оставил.

    * вопрос про standalone deriving предлагаю поставить после гадтов и экзистенциалов
    

    По-моему лучше оставить как есть. Вроде спрашиваем сначала идейно, пока проблем не возникало. Ну и если перенести получится такая же ситуация, только наоборот. Придётся при изучении сложных экстеншенов читать про дерайвинг.

    С остальным согласен.

  11. olgaklimenko commented on Mar 22, 2021

    @olgaklimenko
    Contributor

    Экзистенциалы все же луше перенести повыше, rankNTypes соглашусь, можноо ставить где они есть.

    Еще:

    • Provide example cases on when we can use ExistentialQuantification and when we can use RankNTypes.
    • What are the situations which require using ScopedTypeVariables, ExistentialQuantification, RankNTypes? Compare the use cases of theese extensions.

    Эти два вопроса можно смержить, и поставить после RankNTypes.

  12. olegromashin commented on Mar 22, 2021

    @olegromashin
    ContributorAuthor

    Ага, уже смёрджил, забыл упомянуть)

  13. olgaklimenko commented on Apr 7, 2021

    @olgaklimenko
    Contributor

    @antonkalinin-ml можешь предложение по laziness в отдельное ишью вынести?) А то тут по экстеншенам задача, и она уже сделана, мне кажется сюда никто не зайдёт уже, чтобы обсудить твоё предложение :)

  14. antonkalinin-ml commented on Apr 7, 2021

    @antonkalinin-ml
    Contributor

    @olgaklimenko @olegromashin перенес в #309 , можно данную таску закрывать.

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions