Зигохистоморфный
хаскель платформа перегружена)
Зигохистоморфный
слишком много всего
Anonymous
🤔
Кабачок
это и делаеться go get по дефолту
если не ошибаюсь, при этом всплывают те же проблемы, что и у кабала без песочниц, поэтому теперь либы копируют в папку vendor в репе
A64m
🤔
ну есть, фактически два комьюнити, некоторые участники которых друг к другу такую неприязнь испытывают, что кушать не могут. Конечно у них разные сайты будут
Anonymous
никогда не слышал, есть по-подробнее описание?
A64m
могу только позавидовать, конечно, это просто в каждой второй теме на хаскельреддите
A64m
но не то чтобы эту борьбу кто-то описывает
Кабачок
достаточно просто не читать реддит
Alexander
да они везде
Alexander
в кафе
Alexander
и #haskell
Alexander
даже в этом чятике
кана
никогда не замечал)
Alexander
иногда бывают обсуждения
Alexander
в этом чате правда похоже что тенденция на поддержку консервативной стороны
A64m
там которая сторона консервативная-то?
Алексей
Кабал, думаю
A64m
не знаю, я за комитетчиков, например, потому, что Снойман напрыгивал на ньюбилд-бекпак, мол, лучше стека нам ничего уже и не нужно
A64m
так что может в 15-ом году комитетчики были консерваторы, но в 16-ом они уже прогрессисты
Алексей
Все прогрессисты, на самом деле, только метод прогресса разный. Снойманиты любят быстро нафигачить
Алексей
А комитечики любят правильно
A64m
ну они были прогрессисты, пока теснили комитетчиков, а как отвоевали себе место, так их прогрессивность и закончилась
Alexander
да
Alexander
революционеры?
Mi Shа
Подскажите, пожалуйста, что значит запись [a -> a] ?
Зигохистоморфный
список стрелок
A64m
список функций из а в а
Mi Shа
точно, теперь понятно)
dmtkuz
/thread
Leonid 🦇
Я всегда был за комитет, ибо они в ghc коммитят а снойманиты нет
Dmitry
кто-нибудь использовал System.LXC ?
Алексей
Тут, помню, кто-то спрашивал зачем нужен fixed-vector-hetero. Я понял зачем он нужен: с его помощью можно единообразно работать с полями типов произведений. Делать например structure of arrays для произольных типов.
Alexander
как?
Алексей
Я написал такую штуку, пока только для boxed векторов. Но пока не выложил — зависит от незарелизенного fixed-vector-hetero
A64m
давно не видел fixed-vector-hetero, там поддержка имен полей теперь есть?
Алексей
Нет, поддержку имён полей я приделал поверх
A64m
вообще некая гипотетическая комбинация generic-lens, rawr и fixed-vector-hetero могла бы быть чем-то вроде "нормальных рекордов" в смысле языка Ur (не пробовал его, у него вроде репла нету, но читал обзор Янга по рекордам)
Зигохистоморфный
A64m
http://blog.ezyang.com/2012/04/how-urweb-records-work-and-what-it-might-mean-for-haskell/
A64m
вроде этот, может еще что-то. давно это было уже
Зигохистоморфный
там рекорды по типу как в пурсе?
Alexander
у меня были имена поверх vector-fixed-hetero с линзами
Alexander
но я дальше proof-of-concept не пошёл оно страшное было и только для boxed
Alexander
и lazy
A64m
http://www.impredicative.com/ur/tutorial/tlc.html
A64m
там они помощнее вроде, да и появились они раньше намного
Alexander
а то меня волковские рекоды выбесили прекрасными инстансами
Alexander
и я решил для прикола запилить, но мне показалось неюзабельно
A64m
я как-то тоже делал рекорды, только на имплицитах, вообще после 8.0 их можно, наверное, нормальными сделать без ансейфкоэрсов везде
Зигохистоморфный
мне кажется Ur веб это нормальная модель как должен выглядеть веб
Зигохистоморфный
а не эта чехня что сейчас
Зигохистоморфный
Alexander
на гистах был
Alexander
@A64m_qb0 а с перестановкой элементов там нормально?
A64m
я сортировал элементы по имени поля, но я для этого использовал сортировку из прелюдии singletons, конечно, для нормальной библиотеки это тяжеловатая зависимость
Anatolii
а библиотечки для protobuf3 у нас нет?
Alexander
у колмодина какая-то была
Anatolii
что-то я вчера плохо искал
Anatolii
https://github.com/awakesecurity/proto3-suite
Alexander
хм.. не вижу.. инетересно
A64m
а есть пример? может гист какой-то?
{-# LANGUAGE ImplicitParams, ConstraintKinds, GADTs, RankNTypes #-}
module Main where
— начинается имплементация рекордов
data Rec fields where
Rec :: fields => Rec fields
infixr 1 ?
(?) :: Rec fields -> (fields => r) -> r
Rec ? e = e
— готово
type RXY = Rec (?x::Int, ?y::Int)
xy, xy' :: RXY
xy = let ?x = 1; ?y = 2 in Rec
xy' = Rec where ?x = 3; ?y = 4
foo :: RXY -> Int
foo r = r ? ?x + ?y
type RZ = Rec (?z::Int)
z :: RZ
z = Rec where ?z = 42
— type RXYZ = (RXY, RZ)
type RXYZ = Rec (?x::Int, ?y::Int, ?z::Int)
xyz :: RXYZ
xyz = xy ? z ? Rec — concatenation
t1 = foo xy
t2 = foo (xyz ? Rec) — subtyping
t3 = foo (xy ? Rec)
main = print $ foo xy
A64m
это довольно старое изобретение из хаскель-кафе, имплементация расширяемых рекордов в две строчки
A64m
я для нее пытался написать Show, Eq, сортировку по полям и т.д.
A64m
но тогда небыло тайп-апликейшен, а имплициты рассахариваются в класс, который без этого почти невозможно использовать, кроме как адовыми хаками с экзистенциальными типами и ансейф-коэрсами
Зигохистоморфный
ну ок, а как твоя версия на ghc8 выглядит?
A64m
тут-то сама первоначальная идея, она не меняется от версии компилятора, хаки не выложены
Alexander
@A64m_qb0 а паттерн матчить можно?
Alexander
кроме как view patterns-ами какими?
A64m
есть
class IP (x :: Symbol) a | x -> a where
ip :: a
и ?x :: Int рассахаривается в IP "x" Int чтоб писать Show надо либо писать ip @"x" что до недавнего времени было нельзя, либо хаки с ансейфкоэрсами
A64m
тут только именованными
Alexander
ладно, вроде прокатывает и без
A64m
а так foo Rec = ?x + ?y вот и весь паттерн матчинг
Алексей
А если foo Rec Rec ?
Dmitrii
А разве до -XTypeApplications не надо было использовать прокси? То есть писать ip :: Proxy x -> a, а затем ip (Proxy :: Proxy "x") вместо ip @"x". Понимаю, что страшно, но раньше это не выглядело как грязные хаки...
A64m
эта идея вообще не тянет на полноценные рекорды конечно, но на ней можно сделать более щадящий синтаксис для объявления безымянных рекордов
xy = let ?x = 1; ?y = 2 in Rec
xy' = Rec where ?x = 3; ?y = 4
без каких-то там .= =: и прочего что обычно делают
A64m
А если foo Rec Rec ?
ну каждый из этих Rec запустит в в свой элиминатор инстансы классов, которые он "захватил", т.е. пока поля не одноименные все должно быть нормально. в примере такое и есть, на самом деле, где "конкатенация рекордов"
Alexander
ну вот r | ?x = не хочет работать