A64m
тем временем лин.типы пошли в комитет, но как-то неуверенно: > usually, when a proposal has been submitted, I just pick a shepherd. But I feel the linear types proposal, is not something I can just impose on any of you. > Therefore, I’d like to have a volunteer to step forward and claim this one. > Any takers? (пока добровольцев нет)
A64m
тем временем автор или-паттернов: > clearly @mchakravarty is too busy for this, can we assign this to someone else? и в ответ: > I am sorry for being slow. I'll do it this month. (The trouble with this proposal is that I need to read it and it is long and complex.) когда вошел в рулевой комитет, а там ВНЕЗАПНО НАДО ПРОПОЗОЛЫ ЧИТАТЬ ну кто бы мог подумать, а?
Pavel
Есть Functional Pearls, там вот как ты написал: лобовое решение, и решение с помощью функциональности. Очень познавательно было. Есть русский перевод
нашел вот это: https://wiki.haskell.org/Research_papers/Functional_pearls и книгу: https://www.amazon.com/Pearls-Functional-Algorithm-Design-Richard/dp/0521513383 это то/те или если нет, можно прям ссылку на ту статью / книгу что имеешь ввиду ?
A64m
думаю, что хаскельные недоиде плохо подходят для начинающих, потмоу что требуют обычно доработки напильником
Pavel
в общем простой текстовый редактор с подсветкой синтаксиса должно быть самое оно
A64m
также, языковой сервис для них всегда надо самому собирать, и это большой и сложный хаскельный проект обычно, так что требуется некоторый опыт использования хаскельных билдтулов
Pavel
да, понимаю. благодарю всех за советы и рекомендации 🙂
Ю ли я? 🤔
и на чем для себя остановился ?
Емакс на ноуте, где мало оперативки, Атом на десктопах )
A64m
у меня vscode c Haskell Language Server
Ю ли я? 🤔
Обошёлся бы одним емаксом, но за долгие годы так и не смог сдружиться с фортепианным интерфейсом и конфигуряемостью всего (часто через одно место) :(
Cheese
опять редакторосрач? уже кто-нибудь сказал, что емакс и вим для динозавров?
Maxim
где срач?
Maxim
нет срача
Cheese
эх, хаскельру уже не тот
Ю ли я? 🤔
опять редакторосрач? уже кто-нибудь сказал, что емакс и вим для динозавров?
Для динамистов. Раз уж держат в уме все типы всех переменных – и все клавиатурные аккорды без проблем запомнят.
Арсений
Ну есть spacemacs, там довольно классно подсказки сделаны
кана
на самом деле черчевая (фриир?) версия куда более наивная
кана
ведь именно там именно что конструктор для бинда
кана
то есть если не видеть Free (f (Free f a)), но быть знакомым со свободными структурами (но не с универсальной free для всего), то до freer догадаться вроде проще
Зигохистоморфный
Free надо юзать, когда вот прям в этой функции надо обрабатывать синтаксическое дерево. Интерпретировать его там или менять в нем что-то, а Church надо использовать, когда это дерево конструируешь, потому что иначе >>= является O(n) по сложности вместо O(1), потому что каждый раз приходится по всему дереву пробегать, чтобы к нему что-нибудь в конец добавить
кана
думается мне, это самая наивная (но конечно далеко не самая эффективная) реализация фри-монады: {-# LANGUAGE DataKinds #-} {-# LANGUAGE GADTs #-} {-# LANGUAGE KindSignatures #-} {-# LANGUAGE RankNTypes #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeOperators #-} import qualified Control.Monad.State as S import Data.Kind type f ~> g = forall x. f x -> g x data Free :: (Type -> Type) -> Type -> Type where Pure :: a -> Free f a Lift :: f a -> Free f a Map :: (x -> a) -> Free f x -> Free f a Apply :: Free f (x -> a) -> Free f x -> Free f a Bind :: Free f x -> (x -> Free f a) -> Free f a instance Functor (Free f) where fmap = Map instance Applicative (Free f) where pure = Pure (<*>) = Apply instance Monad (Free f) where (>>=) = Bind foldFreeM :: forall f m. Monad m => (f ~> m) -> (Free f ~> m) foldFreeM run = go where go :: Free f ~> m go (Pure x) = pure x go (Lift m) = run m go (Map f m) = fmap f (go m) go (Apply mf mx) = go mf <*> go mx go (Bind mx f) = go mx >>= (go . f) data MyStateF s a where Get :: MyStateF s s Put :: s -> MyStateF s () type MyState s a = Free (MyStateF s) a runMyState :: s -> MyState s a -> a runMyState state m = S.evalState (foldFreeM go m) state where go :: MyStateF s ~> S.State s go Get = S.get go (Put s) = S.put s get :: MyState s s get = Lift Get put :: s -> MyState s () put = Lift . Put modify :: (s -> s) -> MyState s () modify f = get >>= (put . f) main :: IO () main = putStrLn $ runMyState (5 :: Int) $ do x <- get modify (+ 1) y <- get pure $ "Before: " ++ show x ++ "\nAfter: " ++ show y https://gist.github.com/kana-sama/b1efb103cf2af329ef072f8b60bdc2e0
Anonymous
Была какая-то книга и в названии было Haskell и Finance, попробуй поискать ее, но я ее не читал, просто вспомнил
Haskell Financial Data Modelling and Predictive Analytics - странная книга, целые главы мат.моделей без строчки хаскельного кода
Ilya
кто-то что-то слышал или может сказать про DFinity?
Anonymous
Подскажите компилятор/интерпретатор для Haskell на Android Если есть
Leonid 🦇
GHC fatally broken on Ubuntu 18.04 (Bionic) and other distros. Devs tell everyone that there won't be a fix for 8.4. Who do we ask for help here? http://reddit.com/r/haskell/comments/8ic3c5/ghc_fatally_broken_on_ubuntu_1804_bionic_and/
Leonid 🦇
Не смогли избежать успеха. Теперь пользователи ghc даже патч не могут
Pavel
SPJ, How to write a financial contract - http://citeseerx.ist.psu.edu/viewdoc/download;jsessionid=2974AEA8A56F4BC8F31B85C851605054?doi=10.1.1.14.7885&rep=rep1&type=pdf
очень клевый док, благодарю 😊 если есть что ещё в эту сторону - было бы супер круто
Alexander
думается мне, это самая наивная (но конечно далеко не самая эффективная) реализация фри-монады: {-# LANGUAGE DataKinds #-} {-# LANGUAGE GADTs #-} {-# LANGUAGE KindSignatures #-} {-# LANGUAGE RankNTypes #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeOperators #-} import qualified Control.Monad.State as S import Data.Kind type f ~> g = forall x. f x -> g x data Free :: (Type -> Type) -> Type -> Type where Pure :: a -> Free f a Lift :: f a -> Free f a Map :: (x -> a) -> Free f x -> Free f a Apply :: Free f (x -> a) -> Free f x -> Free f a Bind :: Free f x -> (x -> Free f a) -> Free f a instance Functor (Free f) where fmap = Map instance Applicative (Free f) where pure = Pure (<*>) = Apply instance Monad (Free f) where (>>=) = Bind foldFreeM :: forall f m. Monad m => (f ~> m) -> (Free f ~> m) foldFreeM run = go where go :: Free f ~> m go (Pure x) = pure x go (Lift m) = run m go (Map f m) = fmap f (go m) go (Apply mf mx) = go mf <*> go mx go (Bind mx f) = go mx >>= (go . f) data MyStateF s a where Get :: MyStateF s s Put :: s -> MyStateF s () type MyState s a = Free (MyStateF s) a runMyState :: s -> MyState s a -> a runMyState state m = S.evalState (foldFreeM go m) state where go :: MyStateF s ~> S.State s go Get = S.get go (Put s) = S.put s get :: MyState s s get = Lift Get put :: s -> MyState s () put = Lift . Put modify :: (s -> s) -> MyState s () modify f = get >>= (put . f) main :: IO () main = putStrLn $ runMyState (5 :: Int) $ do x <- get modify (+ 1) y <- get pure $ "Before: " ++ show x ++ "\nAfter: " ++ show y https://gist.github.com/kana-sama/b1efb103cf2af329ef072f8b60bdc2e0
Давай еще Free-монаду выразим через другую Free-монаду.
A64m
ну история с дефолтным A развивается понятным образом > We certainly want to make sure the nursery is not larger than the largest cache. I believe the correct choice almost certainly depends on the amount of parallelism in the program. In a highly-parallel program, the synchronization cost of GC is very high, so we probably want to approach the largest cache. In a mostly-serial program, it may be better to limit the nursery to a smaller, faster cache so the GC mostly hits objects that are already in cache. сейчас как вместо 1мб вообще 256кб сделают
Крылатый
Вот кстати. Кто сможет объясниь, что такое "криптоэкономика" и чем она отличается от обычной?
IC
Не смогли избежать успеха. Теперь пользователи ghc даже патч не могут
не понял в чём там фатальность... недавно компилил 8.4 на 18.04...
Leonid 🦇
В тикете есть
Крылатый
Leonid 🦇
> It's the version from stack.
Leonid 🦇
То о чем предупреждал hvr.
A64m
так там же и хвровские работать не будут, нет?
Leonid 🦇
Хвр пропатчить может же
IC
бага то вообще в новом binutils
A64m
ну так и снойманиты могут
Leonid 🦇
Но не будут
IC
8.4 в LTS не попал, обновят найтли на минорчик. в чём проблема то?
Leonid 🦇
У снойманитов ghc не дистроспецифичные
A64m
да будут
A64m
правда 8.4.3 вроде как будут делать, так что это не важно
A64m
У снойманитов ghc не дистроспецифичные
на самом деле дистроспецифичные, они несколько версий поддерживают и стек качает соответствующую.
Leonid 🦇
В любом случае требовать релиза для фикса специфичного бага в одном дистре это как-то черезчур
A64m
ну это достаточно популярный дистр все же
IC
У снойманитов ghc не дистроспецифичные
так это и не дистрибутив компилит код. к остальным этот бинутилс тоже прилетит.
IC
ну и не очень понятно чем плохо иметь гхц с фиксом для другого "дистрибутива"
Leonid 🦇
Патч же есть
Dmitry
Очередная смена власти?
Крылатый
Очередная смена власти?
Хз, не вижу звёздочки.
Leonid 🦇
Мне админа не дают. Боятся лево-либерального террора.
Alexander
Очередная смена власти?
Нас одновременно назначили
Alexander
...Вчера прогонял еще бенчмарки. Ленивая версия modifyTVar из состава нативной STM наглухо виснет в Criterion. Как бы понять, почему?
IC
Очередная смена власти?
Не власти, а спамочистов.
Евгений
Мне админа не дают. Боятся лево-либерального террора.
Завершим реформы так: Бовуар, Фуко, ГУЛАГ!
Alexander
дистрибутивы собирают бинутилсы и добавляют патчи
Maxim
@qnikst а что, хакпорт не умеет рекурсивно зависимости генерировать?
Alexander
нет
Maxim
ну е-мое, зачем он нужен тогда
Alexander
чтобы ебилды руками не писать
Maxim
ага, а копаться в стопицот зависимостей все равно надо
Maxim
хакадж как npm блин, хочешь поставить что-нибудь, вот тебе тонна еще каких-то мелких пакетов с непонятными названиями
Alexander
мелкие пакеты с непонятными названиями уже есть в репозитории в большинстве