Alexander
оверлоадед лист заменяет [a,b,c] на fronList [a,b,c]
Alexander
а там типы не сойдутся
кана
Для учебных целей попробовал реализовать интерпретатор лямбда-исчисления.
Мой первый подход тупой - я имел некий контекст (массив пар имя*терм), шел по АСТу, заменял (Var name) на значение из контекста. Это не сработало, потому что для каждой лямбды нужно еще запоминать контекст ее создания. Можно было как-то преобразовывать в другое дерево, где у лямбд уже есть контекст, я не стал.
Поэтому я стал гуглить у нашел некий доклад, где просто тупо взяли формализацию ЛИ и имплементировали (то есть никаких контекстов, просто когда находим (\x.e) v, то деалем замену x->v в e. Это решение работает, но не выглядит эффективным.
Вопрос такой: какой из подходов лучше?
UPD:
энвайромент какой-нибудь таки нужен для тайп/клос-чекинга
кана
код второго подхода
https://gist.github.com/kana-sama/e044a6cd4666daf27f5076bf4377f132
Vasiliy
в простых случаях генерируемый из рекурсивной функции код будет точно таким же, как и генерируемый из циклов
Vasiliy
с чем-то сложным я не экспериментировал, но вообще, он может оптимизировать любые хвостовые вызовы
Vasiliy
я переписал некоторое время назад один код с лютой лапши на CPS с лямбдами, изменения в производительности были в пределах погрешности
Artem
Leonid 🦇
@qnikst а нет network-transport-tls?
Alexander
турки писали по вебсокетам транспорт
Denis
https://twitter.com/broadway_lamb/status/919286296262082560
Ilya
Denis
Плюсы явно правее должны быть
Алдар
Anonymous
Anonymous
objc
Danila Matveev
скалу забыли
https://s14-eu5.ixquick.com/cgi-bin/serveimage?url=https:%2F%2Fpbs.twimg.com%2Fmedia%2FCAQimeDVEAAlnSh.jpg&sp=44553a8d03d2faae2f938ac490366729
Cheese
http://devzen.ru/wp-content/uploads/2017/03/dz135.jpg
IC
Lambda cat is watching you calculate
andrei
Кабачок
++
За скалу надо не плюсовать, а <|*|>
Denis
что это за инфиксный goatse?
Denis
E[*]Ǝ
Кабачок
Спейсшип оператор, известен тем, что если не знать его названия, в гугле про него ничего не найдешь
Denis
это вид сзади?
Кабачок
Все вопросы к мейнтейнерам scalaz
Denis
напоминает котика http://photo.iarex.ru/insimgs/201336/b551410b92e4.jpg авторства путина
Ilya
Ilya
извините
Dmitrii
это невозможно все же
@qnikst @hotkosc Это всё же возможно. Вот гист: https://gist.github.com/ChShersh/a13d97b5659382e94107ea8bc8e30c46
А вот вопрос с SO, о котором я говорил:
https://stackoverflow.com/questions/43435721/how-to-combine-two-lists-in-haskell
Alexander
@chshersh а ну если ещё и num то можно
Alexander
но это только для цифирей
Alexander
а со строками или т.п. уже не взлетит
A64m
кто-нибудь вообще видел какие-то примеры использования этих нетипизированных списков, чтоб они хорошее впечатление производили?
Dmitry
чего это они нетипизированные?
A64m
я понимаю, что они на самом деле монотипизированные
A64m
и вопрос в основном сводится к "кто-нибудь видел какие-то примеры на языках с одним типом, которые производили бы зорошее впечатление?"
Кабачок
Что есть хорошее впечатление?
Dmitry
IRL пришлось использовать экзистенциальные типы и даже RankNTypes в задаче, пожалуй, динамического полиморфизма - вывод API с общей сигнатурой. но разным поведением из сервантовских типов. еще пачка расширений, что бы типы выводились
Dmitry
насчет хорошего впечатления не уверен, но по другому было никак
A64m
@greenest_pig когда не хочется этого больше никогда не видеть
A64m
@voidlizard я про примеры таких списков из дин.языков от их любителей
Dmitry
ну тут был не список, но задача похожая на ту, которую приводят в примерах для этих списков - т.е тип толком неизвестен, но для него есть реализация определенных тайпклассов, поэтому можно вызывать их методы
Dmitry
конкретно списка не использовалось, при этом.
Кабачок
То есть как это обычно делается в ООЯ.
Dmitry
ага.
Dmitry
в хаскелле это боль.
A64m
это боль тогда, когда в операциях параметров этого неизвестного типа больше одного
A64m
когда один - еще сносно
A64m
но все равно надо бойлерплейт писать обычно
A64m
правда, проблема одного параметра и в ООП обычно есть, исключая всякую экзотику
Cheese
A64m
@cblp_su в смысле, когда они как структурированный файл используются а ля жсон?
Cheese
да, как формат
A64m
а в этом то случае какие преимущества у безтиповых языков? Там даже линзы не сделать вроде тех что для иксемеля и жсона в хаскеле есть? Даже элементарных удобств нет
Dmitry
1) порог входа 2) простота реализации
Кабачок
Секспы парсить просто.
A64m
что в языке с типами их парсить сложнее что-ли?
Anonymous
вектор с трейт объектами использовал в расте пару раз
Зигохистоморфный
вопросик
A64m
смотрю Park Bench Panel Session with #HaskellX Experts пурскриптофанат меня затроллил
кана
A64m
ну конечно, еще и антитуплофолдабелист закукареал.
Dmitry
ситуацией с иде, что ли?
A64m
нет
Зигохистоморфный
вопрос отпал
Зигохистоморфный
но возник другой
Anonymous
да
A64m
деперь про гипотетических БЕГИННЕРОВ еще
A64m
кажется, что хуже быть не может уже, но уже в следующую минуту ясно, что хуже всегда может быть
A64m
но вообще нынешний haskellx неплохой
Зигохистоморфный
попробовал сделать аппликатив, но
instance Functor f => Applicative (MyFree f) where
pure = MyReturn
MyReturn a <*> MyReturn b = MyReturn $ a b
MyReturn a <*> MyBind mb = MyBind $ fmap a <$> mb
MyBind ma <*> b = MyBind $ (<*> b) <$> ma
как это решить?
• The type synonym ‘MyFree’ should have 2 arguments, but has been given 1
• In the instance declaration for ‘Applicative (MyFree f)’
A64m
а если сигнатуры для паттернов написать?
Зигохистоморфный
не помогло
Зигохистоморфный
pattern MyReturn :: a -> MyFree f a
pattern MyReturn a = Fix (MyReturnF a)
pattern MyBind :: f (MyFree f a) -> MyFree f a
pattern MyBind a = Fix (MyBindF a)
A64m
я не ожидал, что это заработает, я ожидал что сообшение об ошибках другое будет
Зигохистоморфный
эм
Зигохистоморфный
что-то не так с паттернами