Alexander
хм.. ghc стал перечитывать файл перед выдачей ошибки?
действия
1. let unused = ()
2. запустисть сборку (стеком)
3. закомментировать: — let unused = ()
4. получить error (при -Werror) о неиспользованной переменной unused в строке -- let unused = () закомментированная строка в теле сообщения
Denis
у меня вчера похожее было!
Denis
только там мне во время тайпчекинга неправильный тип в дырке выводился
Denis
когда я его поменял
Alexander
В плане type level magic нужно разделять: желание создать типобесопасный тулинг (что часто бывает полезным) и желание писать бизнес-логику в типах. Второе - от лукавого.
Alexander
не вижу причин для справедливости того, что второе утверждение от лукавого
Alexander
врочем не вижу причин для невысказанно утвержения, что писать бизнес-логику на типах надо всегда
Alexander
Andrei
Alexander
т.е. как бы типы = инварианты проверяемые компилятором, с их помощью можно внести ограничение на значения, стейты переходы
Alexander
читать типы человеку знающему предметную область может быть проще
Alexander
т.к. в них логики существенно меньше, и нету implementation details
Alexander
так же оно всегда чекается
Alexander
дальше уже вопрос, а нужно ли это и что привнесение такой логики принесёт
Alexander
общего ответа тут уже нету
Alexander
Просто потому что Servant - это своеобразный, но DSL, а opalyeye... НедоDSL
Denis
с большим развесистым API в серванте можно пожалеть что ты на свет родился
Denis
удачи при мердже
Alexander
"Понятные" с точки зрения среднестатистического разработчика.
Denis
Ну опять. Что такое “среднестатистический разработчик”? Как мне пользоваться этой метрикой?
Alexander
Заметьте, кстати, разницу. Линзы, - вот уж сложная внутри библиотека, чего только там нет. Но они отличные, их использовать легко. В этом и смысл дизайна. Дизайн компонента не должен вести к тому, чтобы его было трудно использовать.
Denis
спорное заявление, мягко говоря
Leonid 🦇
Средний программист, мальчик молодой.
Leonid 🦇
А чего сложного в type families?
Alexander
жалко только один опрос припинивается
Leonid 🦇
Вот АПИ норм задизайнить это да, это сложно среднему хаскелисту. Ибо нет устоявшихся практик.
Alexander
как их устаивать, когда про accidental complexity тут не договоритьс
Alexander
а как начнётся конкретика, там когда использовать streaming интерфейсы и какой
Alexander
тут вообще все копья переломают
Alexander
Сначала нужно, чтобы переломали. А потом найдется банда из четырех, которая все структурирует как надо.
Aliester
Четыре всадника ФПокалипсиса
Aliester
Монада, Стрелка, Категория и Лямбда
Aliester
какие-то всадницы конечно получаются
Alexander
хорошо не смерть чума и другие два
Aliester
Смерть, Чума, Джонс, Снойман
Alexander
: (
Alexander
Джонс и Снойман в одном ряду
Alexander
: (
Alexander
ушёл рыдать
Konstantin
кто из них хороший, плохой, злой?
Alexander
SPJ хороший
Alexander
добрый, работящий
Alexander
тут однозначно все
Konstantin
лучше армстронга?
Alexander
армстронг не пилил ghc, так что лучше
Denis
+
Alexander
но это biased
Alexander
а с паттернами есть проблема вида "*** considered harfmul"
Alexander
я бы даже сказал forall n : Pattern, n considered harmful
Alexander
*подход
Alexander
ну в блогах и т.п. и изредка в книжках и так пишут
Alexander
Сорри, экранные клавиатуры
Alexander
(о там очепятки были?)
Alexander
Vitaly
А все слышали истинную историю GOTO considered harmful?
parket
Слышали, что GOTO considered harmful
parket
Но это же чушь чистой воды. :D
Vitaly
Ну там Дейкстра написал письмо в Communications of ACM с другим названием, куда более мягким, но Вирт, который был главредом, название поменял и сделал вот это. После этого Дейкстра страшно обиделся.
parket
Заменим на jmp
Aliester
русские не скачут!
A64m
> Дийкстра
> более мягким
ну не знаю
Vitaly
"A Case Against the Goto Statement"
Aliester
Aliester
Вирт
Alexander
проще сделать чтобы устаканилось
Vitaly
У нас, кстати, некоторые преподаватели до сих пор break использовать запрещают, даже в Python