Oleg
видимо, какой-то TH подразумевается
Dmitry
стоп, зачем?
Oleg
@notxcain https://wiki.haskell.org/Template_Haskell
Oleg
если не генерить новые типы то https://wiki.haskell.org/Generics
Denis
Думаю все такие генерить
Oleg
стоп, зачем?
у пацана есть либа для очень очень Free алгебр для scala на макросах, видать, на хачкель расширятся
Alexander
зачем там TH?
Dmitry
+1
Alexander
я пока пытаюсь понять условие очередного вопроса
Oleg
зачем там TH?
Ну ему надо определить новые data на основе предыдущих
Denis
Есть data Foo f = Foo { bar :: forall a. a -> f a, baz :: Int -> f String }
Oleg
Т.е. базу для Free он генерит
Oleg
типа даёшь ему DSL, а он для тебя генерит data для Free под этот DSL
Denis
нужно во время компиляции вывести тип data FooOp a where Bar :: a -> FooOp a Baz :: Int -> FooOp String и две функции to :: Foo f -> (FooOp ~> f) from :: (FooOp ~> f) -> Foo f
Denis
поправил опечатку
Alexander
FooOp ~> f что значит?
Alexander
f :: * -> *
Denis
forall a. FooOp a -> f a
Denis
натуральная трансформация, морфизм в категории эндофункторов.
Oleg
но в хаскеле в GADT меньше бойлерплейта и больше свободы, думаю, что юзеры предпочтут писать их ручками
Denis
но в хаскеле в GADT меньше бойлерплейта и больше свободы, думаю, что юзеры предпочтут писать их ручками
да, я вижу, что в хаскеле смысла нет потому что в скале смыта граница между тайпклассами и типами
Denis
и тот же Foo можно как тайпкласс использовать.
Alexander
ну в скале нету когеретных классов типов
Alexander
ладно, если полный код есть я могу подумать, если кто другой не напишет как надо до этого
Denis
Да это так, развлечения дла мозга. А что есть в хаскелл, для построения кластерных систем? Например раскидать поведения по нескольким нодам которые друг про друга знают и умеют роутит сообщения к нужной, где есть некий стейт для выполнения операций?
Dmitry
cloud haskell ?
Alexander
да
Denis
http://haskell-distributed.github.io/documentation.html#concurrency-and-distribution
Dmitry
а почему мы его не используем, что бы ноды снюхивать? вместо серванта?
Denis
звучит как то что надо
Alexander
не знаю
Alexander
@notxcain если что его меинтейнеры в этом чятике в том числе
Alexander
@voidlizard он большой зверь очень в некоторых случаях проще архитектуру можно построить
Alexander
мы может зопилим более адекватное решение позже, но это ребята в другом отделе делают, и я пока не очень впечатлен тем что там происходит, хотя хорошие идеи есть
Misha
но суть та же класс для поиска 1 и класс для постиска списка
попробовал, брат жив, но пока Всё Плохо: getIdx :: IdxLookup ixs i v => GenStore ixs k v -> Key i -> GenIdx i v и мне понятно, сообщают, что ixs :: [*], из-за определения GenStore. И я как-то туплю и не могу найти куда мне в эту сигнутуру вписать ixs :: [*]
Misha
так, пора гист завести видимо
Alexander
не понимаю вопроса :(
Misha
да, очень путано
Misha
https://gist.github.com/lolepezy/272ee5d708319f040673e150a7ccea60
Misha
вот
Misha
getIdx не тайпчекается, потому что нужен констрейнт, что ixs :: [*]
Misha
и я чотопэ
Misha
то есть там возможно много остального неправильного тоже, но там я потом разберусь
Alexander
я через час где-то посмотрю, ок?
Misha
без проблем, конечно
Artem
https://gist.github.com/lolepezy/272ee5d708319f040673e150a7ccea60
эта штука не компилируется из-за неизвестных имён Store, Idx и подобных. Это баг или фича?
Misha
это фича, там скорее всего еще куча зависимстей
Misha
будет длинно
Artem
попробовал, брат жив, но пока Всё Плохо: getIdx :: IdxLookup ixs i v => GenStore ixs k v -> Key i -> GenIdx i v и мне понятно, сообщают, что ixs :: [*], из-за определения GenStore. И я как-то туплю и не могу найти куда мне в эту сигнутуру вписать ixs :: [*]
конфликтуют использования ixs в GenStore и в IdxLookup: в первом ixs имеет кайнд [*], а во втором ixs используется как тип параметра функции, потому он должен быть каинда *. Последнее ограничение явно сообщит комилятор если явно попросить его в IdxLookup сделать каинд [*] для ixs (class IdxLookup (ixs :: [*])).
Alexander
угу там proxy ivs, написатт
Alexander
поменяй ivs там на Proxy ivs
Pavel
Всем доброго времени суток. Есть ли тут emacs-соводы? Не подскажите ли какой набор плагинов на сегодня лучше всего юзать для разработки haskell?
Kirill
Spacemacs+haskell-layer удобен. Все сразу из коробки работает.
Pavel
У меня просто emacs - я так понял layer - это сборка пакетов? слой такой?
Pavel
ща гляну из чего оно состоит
Evgeniy
http://spacemacs.org/layers/+lang/haskell/README.html
Kirill
Да. И в этом его плюс. Что ничего не нужно самому конфигурировать.
Pavel
я пробовал spaceemacs - както монстровато.. обратно на emacs со своими настройками переполз. Ну дело вкуса. Настроить самому наоборот в кайф
Evgeniy
тут сам слой описан, можно глянуть что за пакеты https://github.com/syl20bnr/spacemacs/tree/master/layers/%2Blang/haskell
Pavel
ну во общем я так понял в этом слое самое актуальное и рабочее на сегоднешний день. Благодарю! Попробую разобраться
Pavel
а менеджер проектов какой используется. Ну чтобы создать проект. Произвести его тестирвоание и сборку?
Pavel
Это cabal - я правильно понял?
Alexander
щас многие любят стеком пользоваться
Alexander
небезосновательно
Misha
поменяй ivs там на Proxy ivs
Хм. Где там? Мне же нужен не только тип, но и сам Indexes, чтобы значение достать их него
Alexander
indexes у тебя не *
Alexander
он не может существовать на value level
Misha
ага!
Alexander
https://gist.github.com/lolepezy/272ee5d708319f040673e150a7ccea60#file-kv-hs-L47 эта строка
Alexander
как proxy - ты передать можешь
Misha
окей, это ясно. Но как тогда доставать что-то из конкретного value?
Misha
примерно понял куда копать
Alexander
смотря тчо за value
Misha
обновил до чего-то компилирующегося
Misha
теперь правда он жалуется на overlapping instances при попытке вызвать getIdx