LINUX.ORG.RU

История изменений

Исправление EvgenijM86, (текущая версия) :

И такими в том числе. Мне лично плевать насколько у него навороченная система типов, если базовые вещи делать неудобно.

Представьте себе, например, описание 1000 NPC в игре, каждый из которых может иметь разное колличество полей. Мы тут либо делаем id_NPC_NAME1, id_NPC_NAME2, id_NPC_NAME3 до посинения (тоже самое со здоровьем и т.д.), либо запихиваем поля одинаковые для всех NPC в отдельную структуру и создаем NPC как вложенную структуру данных. И все бы ничего, только обращение к вложенным структурам данным в хаскеле сделано через жопу.

В ООП это npc.field.field2.field3 = something. Или же вообще просто npc.field3, если мы наследовали классы.

В Хаскеле же придется это дело каждый раз распаковывать проходя всю цепочку. Вот как выглядит это убожество:

addManStk team = team {
    manager = (manager team) {
        diet = (diet (manager team)) {
             steaks = steaks (diet (manager team)) + 1
             }
        }
    }

Вместо team.manager.steaks += 1. Не нравится? Ну тогда изучайте линзы и прочие сделанные на коленке вещи.

Вот такое было мое знакомство с Haskell. Рад, что они выбираются из этой ситуации, хоть и очень медленно.

Исходная версия EvgenijM86, :

И такими в том числе. Мне лично плевать насколько у него навороченная система типов, если базовые вещи делать неудобно.

Представьте себе, например, описание 1000 NPC в игре, каждый из которых может иметь разное колличество полей. Мы тут либо делаем id_NPC_NAME1, id_NPC_NAME2, id_NPC_NAME3 до посинения (тоже самое со здоровьем и т.д.), либо запихиваем поля одинаковые для всех NPC в отдельную структуру и создаем NPC как вложенную структуру данных. И все бы ничего, только обращение к вложенным структурам данным в хаскеле сделано через жопу.

В ООП это npc.field.field2.field3 = something. Или же вообще просто npc.field3, если мы наследовали классы.

В Хаскеле же придется это дело каждый раз распаковывать проходя всю цепочку. Вот как выглядит это убожество:

addManStk team = team { manager = (manager team) { diet = (diet (manager team)) { steaks = steaks (diet (manager team)) + 1 } } }

Вместо team.manager.steaks += 1. Не нравится? Ну тогда изучайте линзы и прочие сделанные на коленке вещи.

Вот такое было мое знакомство с Haskell. Рад, что они выбираются из этой ситуации, хоть и очень медленно.