|
Модератор
|
|||||||||||||||||||||||||||||||
Претензии к Haskell01.01.2015, 12:48. Показов 1656. Ответов 18
Метки нет (Все метки)
Почему нельзя было сделать однообразно?
Для охранных выражений otherwise, а для case, для этих же целей, служит просто _. И лямбда выражения можно было записывать через =, чем они от именованных отличаются? И, кстати, можно было бы несколько вариантов шаблонов записывать
На не ленивом, понимаешь, LiveScript шаблон когда надо разбирается, на ленивом Haskell падает. Ладно, всё равно его не брошу потому что ... тут есть монады ![]() Ещё раз, всех с Новым годом. Добавлено через 8 минут Ладно, для последнего примера я погорячился - шаблон нужно заранее разбирать для проверки соответствия, а не только для извлечения значений. На Haskell много шаблонов может быть.
1
|
|||||||||||||||||||||||||||||||
| 01.01.2015, 12:48 | |
|
Ответы с готовыми решениями:
18
Место ФП и Haskell в компьютерной индустрии (Для чего он нужен, этот Haskell?) Претензии от пользователей софта Haskell |
|
|
||||||
| 01.01.2015, 14:10 | ||||||
|
Я не знаток философии разработчиков Хаскеля, но могу предположить ход их мыслей.
Присваивание (назовём этот символ = так) заключается в том, что выражению справа даётся имя, записанное слева. Наличие слевая образцов и стражи — синтаксический сахар, нужный ради избежания лишних букв и лишнего case-of. Соответствие (->) по смыслу является сопоставление выражению слева, которое нам в некотором виде дано, выражению справа, которое нужно посчитать. Так, (\x -> M) сопоставляет каждому x выражение M, а case obj of x -> M, которое эквивалентно (\x -> M) obj, объекту obj, который выглядит как x, сопоставляет M. Наверное, да, можно было спроектировать язык без знака (=). Достаточно конструкцию let pat = expr in e заменить на let pat -> expr in e. Мне много чего не нравится в Haskell. Взять хотя бы полуявную типизацию, над которой приходится шаманить, как только хочется протянуть полиморфизм куда-то вглубь терма (да-да, я люблю типизацию по Черчу) или объяснить, почему классовые операции применимы. В результате вся выгода неявного Хиндли-Милнера уходит в ноль, писать типы всё равно нужно. Ещё не нравится отсутствие внятной политики в отношении зависимых типов и сильного полиморфизма: у GHC есть много-много Почему я остаюсь с Haskell? Лучше не нашел, да и разработчики нравятся.
2
|
||||||
|
Модератор
|
|||||||||||||
| 01.01.2015, 14:59 [ТС] | |||||||||||||
0
|
|||||||||||||
|
|
||||||||||
| 01.01.2015, 15:34 | ||||||||||
|
Вы же говорите про соответствие
0
|
||||||||||
|
650 / 260 / 16
Регистрация: 02.03.2014
Сообщений: 587
|
|||||||
| 01.01.2015, 15:47 | |||||||
|
А я придерусь, с другой стороны. На мой взгляд знак =, в охранных выражениях должен писаться как -> . Во всех иных местах он значит присваивание имени выражению. А там эта функция несколько смывается. По мне уж лучше бы было писать.
Добавлено через 5 минут
1
|
|||||||
|
Модератор
|
|||||||
| 01.01.2015, 15:51 [ТС] | |||||||
0
|
|||||||
|
650 / 260 / 16
Регистрация: 02.03.2014
Сообщений: 587
|
|
| 01.01.2015, 15:59 | |
|
надо пояснить значит поясню. До 7.6 по моему включительно. Не уверен, нет старого компилятора чтоб проверить. Выражение сопоставлялось с первым удачным образцом. И забыв про все остальные, проверяло условия в гвардах, если такового не было, падало с ошибкой, даже если другой образец был вполне рабочий, но находился после. Сейчас это не так.
0
|
|
|
Модератор
|
||
| 01.01.2015, 16:06 [ТС] | ||
|
Haskell Antipattern
0
|
||
|
|
||
| 01.01.2015, 16:10 | ||
|
Странное поведение ранних версий, не по документации.
Только учтите, что, если if-условия-значения стоит по правую сторону от =, то они являются частью выражения справа, которое оценивается после выбора подходящего образца, а значит, если все условия нарушатся, то программа не сможет пойти дальше и сравнивать с другими образцами. Или же нужно будет вводить механизм, позволяющий изнутри выражения отвергать образец и переходить к следующему.
0
|
||
|
Модератор
|
|||
| 01.01.2015, 16:17 [ТС] | |||
|
Меня, похоже, не поняли. Я за минимизацию словаря языка, только и всего. Добавлено через 3 минуты
0
|
|||
|
650 / 260 / 16
Регистрация: 02.03.2014
Сообщений: 587
|
||
| 01.01.2015, 22:16 | ||
|
1
|
||
|
|
||
| 01.01.2015, 22:44 | ||
|
Скажем, убрать data не получится. Ещё не получится убрать let-in или case-of. И так далее. Убирёте что-нибудь подобное — и язык обеднеет. А можно говорить о сахаре и прочих сладостях, которые можно убрать и язык сохранит свою выразительность, только будет более многословным, страдает удобство. И последнее: можно ли что-то убрать из языка так, чтоб язык не обеднел и при этом остался примерно настолько же удобным? Мне, например, интересно, какую из лямбда-систем (а их тысячи) можно выбрать в качестве базы для более лучшего (удобного) языка, чем Haskell. Если получится, займусь этим в рамках исследовательской работы в будущем году.
0
|
||
|
Модератор
|
||||||||||||
| 02.01.2015, 02:40 [ТС] | ||||||||||||
При этом язык ничего не теряет. Конверсия в такой вариант возможна чуть ли не через sed. data безусловно, отличается от type и newdata - все нужны. Тут только авторов можно упрекнуть в невыразительности и неуместности применённых слов. Я бы использовал, соответственно, type, alias и easytype. До кучи, я бы ввёл контроль диапазонов на целые числа, или даже возможность навесить свою проверяющую функцию на тип. Понятно, такие возможности можно было бы отключать ключом. Это для отладки и тестирования. По моему, это не противоречит ФП.
0
|
||||||||||||
|
|
||
| 02.01.2015, 13:17 | ||
Сообщение было отмечено KolodeznyDiver как решение
Решение
KolodeznyDiver, в целом я согласен с Вами.
0
|
||
|
650 / 260 / 16
Регистрация: 02.03.2014
Сообщений: 587
|
||||||
| 02.01.2015, 15:12 | ||||||
0
|
||||||
|
650 / 260 / 16
Регистрация: 02.03.2014
Сообщений: 587
|
|
| 02.01.2015, 15:43 | |
|
Все мои претензии, чудным образом, после включения соответствующих прагм, работают в рамках ghc...
0
|
|
| 02.01.2015, 15:43 | |
|
Помогаю со студенческими работами здесь
19
HASKELL Задачки по Haskell Типы в Haskell Clean vs Haskell
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|