Alexander
просто я сказал, что возможно стоит подумать в сторону где тред уведовляет об изменениях через канал
Alexander
мониторящий тред смотрит канал если надо и что-то делает
Alexander
В STM каналы тоже есть, ага
Alexander
и очереди!
Alexander
вот вне STM нормальных каналов нет
Alexander
(B)Queue норм, а каналы плохие
Alexander
возможно..
Alexander
(B)Queue норм, а каналы плохие
А что ты скажешь про TArray? Меня несколько смущает этот тип там.
Alexander
это stm-containers?
Alexander
я чего-то ими никогда не пользовался и мне либа сильно не понравилсь
Alexander
Не, прям в stm
Alexander
newtype TArray i e = TArray (Array i (TVar e)) deriving (Eq, Typeable) <-
Alexander
ну такое..
Alexander
fixed size массив с возможными error вместо TVar
Alexander
мне не приходилось использовать его
Alexander
Там написано "вы можете сделать свою, более эффектинвую реализацию Array для STM" Я не очень понимаю, что с ним делать, с таким массивом
Alexander
ну если у тебя есть пачка переменных STM которых можно индексировать то может и норм
Vladimir
мы ж задачи не знаем
Задача у меня - обёртка для dzen, типа [1], только гораздо круче. Фреймворк для создания интерактивных UI. Он будет спавнить dzen и слушать его stdout - так можно реагировать на пользовательские события. Плюс к этому, тип данных, генерируемых плагинами (которые будут представлены любым IO), будет не Text, а AST, соответствующее DSL dzen[2]. И над этим AST можно выполнять преобразования. Анимации делать, раскрашивать, вот это всё - до того, как оно попадает на вход dzen. [1]. https://hackage.haskell.org/package/dzen-utils [2] https://github.com/robm/dzen См. "In-text formating & control language"
Alexander
Звучит классно!
Vladimir
Оно уже написано (год назад), но в настолько плохом стиле, что лучше я не будут пока публиковать. К тому же без асинхронности плагинов это практически бесполезная вещь.
Anonymous
плохость стиля не повод не публиковать. надо публиковать, чтоб оценить насколько функциональность удобна/востребована
Alexander
@cblp_su а crdl для динамических таблиц существует?
Alexander
где динамическая значит что можно менять столбцы и строки местами добавлять и удалять
Alexander
прсото если для обычного текста есть, то тут наверное так же можно?
Alexander
crdt представление
Alexander
cdrt?
Cheese
именно для таблиц не встречал, могу поискать. навскидку — для текста применяется любой из sequence типов, таблицу можно представить как sequence (sequence a)
Cheese
если ячейки не перемещаются, то LWW-словарик, где в качестве ключей индексы в таблице
Cheese
где динамическая значит что можно менять столбцы и строки местами добавлять и удалять
ой, пропустил собщение. тогда не LWW. sequence (sequence a) должно сработать
Cheese
type Table a = RGA (RGA a) type RgaString = RGA Char type MyTable = Table RgaString
Cheese
а с какой целью интересуешься?
Alexander
думаю можно ли чтото более лучшее с alphasheets сдлелать чем там есть
Alexander
не
Alexander
я ж и так на них работаю
Cheese
ну, не себя продать, а ещё одну фичу?
Alexander
типа того
Alexander
если это сохранит моё sanity
Vladimir
плохость стиля не повод не публиковать. надо публиковать, чтоб оценить насколько функциональность удобна/востребована
ОК. https://gitlab.com/klntsky/dzeny Демо создаёт директорию ~/.dzeny И оно запускает mpc, nmcli, uname, amixer - если чего-то нет, нужно редактировать Demo.hs
Anonymous
Спасибо, посмотрю вечером
Vladimir
Библиотека как раз для такого способа использования мультитрединга, как мне было нужно. https://hackage.haskell.org/package/auto-update-0.1.4/docs/Control-AutoUpdate.html
Igor
Господа, приветствую. Я недавно стал изучать Haskell и ФП, мне порекомендовали заниматься по http://haskellbook.com/. Можете подсказать, стоит игра свеч, а книга с сайта своих денег, или нет?
Я рекомендую курсы на Степике и "Get Programming With Haskell" (Manning). У них же готовится Haskell In Depth Брагилевского (я купил preview - тоже хорошая). В хаскел бук же много воды, и мне не нравится стиль изложения.
Евгений (Владимирович)
... от автора real world haskell. Лаконичные, без особой воды.
Евгений (Владимирович)
CS240h Lecture slides http://www.scs.stanford.edu/16wi-cs240h/slides/
Artem
Ребят, извините, не совсем понял, как мне поможет coerce, если я делаю не T a -> T b, а хочу сделать T a -> a?
Alexander
если T это newtype то поможет
Alexander
coerce :: Coercible * a b => a -> b
Alexander
This two-parameter class has instances for types a and b if the compiler can infer that they have the same representation. This class does not have regular instances; instead they are created on-the-fly during type-checking. Trying to manually declare an instance of Coercible is an error. Nevertheless one can pretend that the following three kinds of instances exist.
Artem
Окей, спасибо) А что за * в нотации типа?
Alexander
то что раньше было kind
Alexander
там скорее всего указано что a и b из star, но haddock тупит
Artem
Понял, еще раз спасибо)
Artem
А как вот такой функции задать тип правильно: unwrapAndStringify :: (Coercible a b, Show b) => a -> String unwrapAndStringify = show . coerce Мне же нужно указать, что a это конструктор
Alexander
не понял
Alexander
а тут это любой тип, который может быть переведен в b
Alexander
такое правда только с TypeApplications используешь. т.к. b не выводится
A64m
unwrapAndStringify :: forall a b. (Coercible a b, Show b) => a -> String unwrapAndStringify = show @b . coerce
A64m
что-то вроде такого, наверное
Artem
Говорит, что тип b вне контекста
Alexander
я думаю нужно будет extenstion чт попросят сделать
A64m
ScopedTypeVariables
Alexander
и там где применяется unwrapAndStringify тоже
Alexander
@ X делать
A64m
да, и еще тогда b и a местами поменять после форолл
A64m
чтоб @_ @КЧемуКастим не писать
Alexander
да
Alexander
но проще писать show @Internal . coerce
Artem
Только в обоих случаях: Not in scope: type variable ‘b’ |48 | unwrapAndStringify = show @b . coerce |
A64m
> import Data.Coerce > :set -XScopedTypeVariables > :set -XTypeApplications > :set -XAllowAmbiguousTypes > :{ | foo :: forall b a. (Coercible a b, Show b) => a -> String | foo = show @b . coerce | :} > import Data.Monoid > foo @Integer $ Sum 24 "24"
Alexander
{-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeApplications #-} {-# LANGUAGE AllowAmbiguousTypes #-} import Data.Coerce import Data.Monoid unwrapAndStringify :: forall b a. (Coercible a b, Show b) => a -> String unwrapAndStringify = show @b . coerce test = unwrapAndStringify @Int (Sum (5::Int))
Alexander
это работает в ghci
Alexander
ахахаха
Alexander
блин почти 1 в 1 написали
Artem
Оу
Artem
Я потерял ScopedTypeVariables