@haskellru

Страница 1499 из 1551
Alexander
04.10.2018
15:17:49
вот вне STM нормальных каналов нет

(B)Queue норм, а каналы плохие

Alexander
04.10.2018
15:18:40
возможно..

Google
Александр
04.10.2018
15:18:50
(B)Queue норм, а каналы плохие
А что ты скажешь про TArray? Меня несколько смущает этот тип там.

Alexander
04.10.2018
15:19:03
это stm-containers?

я чего-то ими никогда не пользовался и мне либа сильно не понравилсь

Александр
04.10.2018
15:19:27
Не, прям в stm

Alexander
04.10.2018
15:20:23
newtype TArray i e = TArray (Array i (TVar e)) deriving (Eq, Typeable) <-

ну такое..

fixed size массив с возможными error вместо TVar

мне не приходилось использовать его

Александр
04.10.2018
15:21:16
Там написано "вы можете сделать свою, более эффектинвую реализацию Array для STM" Я не очень понимаю, что с ним делать, с таким массивом

Alexander
04.10.2018
15:22:36
ну если у тебя есть пачка переменных STM которых можно индексировать то может и норм

04.10.2018
15:28:44
мы ж задачи не знаем
Задача у меня - обёртка для 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"

Александр
04.10.2018
15:29:53
Звучит классно!

04.10.2018
15:31:36
Оно уже написано (год назад), но в настолько плохом стиле, что лучше я не будут пока публиковать. К тому же без асинхронности плагинов это практически бесполезная вещь.

Google
Victor
04.10.2018
15:45:55
плохость стиля не повод не публиковать. надо публиковать, чтоб оценить насколько функциональность удобна/востребована

Alexander
04.10.2018
15:50:47
@cblp_su а crdl для динамических таблиц существует?

где динамическая значит что можно менять столбцы и строки местами добавлять и удалять

прсото если для обычного текста есть, то тут наверное так же можно?

Alexander
04.10.2018
15:51:39
crdt представление

cdrt?

Yuriy
04.10.2018
15:53:00
именно для таблиц не встречал, могу поискать. навскидку — для текста применяется любой из sequence типов, таблицу можно представить как sequence (sequence a)

если ячейки не перемещаются, то LWW-словарик, где в качестве ключей индексы в таблице

где динамическая значит что можно менять столбцы и строки местами добавлять и удалять
ой, пропустил собщение. тогда не LWW. sequence (sequence a) должно сработать

type Table a = RGA (RGA a) type RgaString = RGA Char type MyTable = Table RgaString

а с какой целью интересуешься?

Alexander
04.10.2018
15:59:46
думаю можно ли чтото более лучшее с alphasheets сдлелать чем там есть

Yuriy
04.10.2018
16:03:20
Alexander
04.10.2018
16:03:37
не

я ж и так на них работаю

Yuriy
04.10.2018
16:04:20
ну, не себя продать, а ещё одну фичу?

Alexander
04.10.2018
16:04:34
типа того

если это сохранит моё sanity

04.10.2018
17:14:51
плохость стиля не повод не публиковать. надо публиковать, чтоб оценить насколько функциональность удобна/востребована
ОК. https://gitlab.com/klntsky/dzeny Демо создаёт директорию ~/.dzeny И оно запускает mpc, nmcli, uname, amixer - если чего-то нет, нужно редактировать Demo.hs

Google
Victor
04.10.2018
17:17:30
Спасибо, посмотрю вечером

04.10.2018
18:26:46
Библиотека как раз для такого способа использования мультитрединга, как мне было нужно. https://hackage.haskell.org/package/auto-update-0.1.4/docs/Control-AutoUpdate.html

Igor
04.10.2018
18:28:02
Господа, приветствую. Я недавно стал изучать Haskell и ФП, мне порекомендовали заниматься по http://haskellbook.com/. Можете подсказать, стоит игра свеч, а книга с сайта своих денег, или нет?
Я рекомендую курсы на Степике и "Get Programming With Haskell" (Manning). У них же готовится Haskell In Depth Брагилевского (я купил preview - тоже хорошая). В хаскел бук же много воды, и мне не нравится стиль изложения.

Евгений
04.10.2018
19:46:22
... от автора real world haskell. Лаконичные, без особой воды.

CS240h Lecture slides http://www.scs.stanford.edu/16wi-cs240h/slides/

Artem
04.10.2018
19:51:34
Ребят, извините, не совсем понял, как мне поможет coerce, если я делаю не T a -> T b, а хочу сделать T a -> a?

Alexander
04.10.2018
19:51:59
если T это newtype то поможет

coerce :: Coercible * a b => a -> b

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
04.10.2018
19:53:46
Окей, спасибо) А что за * в нотации типа?

Alexander
04.10.2018
19:54:31
то что раньше было kind

там скорее всего указано что a и b из star, но haddock тупит

Artem
04.10.2018
19:55:18
Понял, еще раз спасибо)

Artem
04.10.2018
20:04:44
А как вот такой функции задать тип правильно: unwrapAndStringify :: (Coercible a b, Show b) => a -> String unwrapAndStringify = show . coerce Мне же нужно указать, что a это конструктор

Alexander
04.10.2018
20:08:10
не понял

а тут это любой тип, который может быть переведен в b

такое правда только с TypeApplications используешь. т.к. b не выводится

Google
A64m
04.10.2018
20:12:17
unwrapAndStringify :: forall a b. (Coercible a b, Show b) => a -> String unwrapAndStringify = show @b . coerce

что-то вроде такого, наверное

Artem
04.10.2018
20:14:44
Говорит, что тип b вне контекста

Alexander
04.10.2018
20:15:23
я думаю нужно будет extenstion чт попросят сделать

A64m
04.10.2018
20:15:25
ScopedTypeVariables

Alexander
04.10.2018
20:15:36
и там где применяется unwrapAndStringify тоже

@ X делать

A64m
04.10.2018
20:16:25
да, и еще тогда b и a местами поменять после форолл

чтоб @_ @КЧемуКастим не писать

Alexander
04.10.2018
20:17:41
да

но проще писать show @Internal . coerce

Artem
04.10.2018
20:19:19
Только в обоих случаях: Not in scope: type variable ‘b’ |48 | unwrapAndStringify = show @b . coerce |

A64m
04.10.2018
20:23:04
> 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
04.10.2018
20:23:21
{-# 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))

это работает в ghci

ахахаха

блин почти 1 в 1 написали

Artem
04.10.2018
20:23:55
Оу

Я потерял ScopedTypeVariables

А есть какие-то хаки, что бы везде не писать теперь unwrapAndStringify @CAST_TYPE ...?

Google
A64m
04.10.2018
20:26:56
так ему неоткуда узнать к какому типу кастить иначе

если бы возвращаемый тип бвл тот к которому кастить, не понадобилось бы аннотировать

все зло от show

Alexander
04.10.2018
20:28:58
ну или не coerce я что-то из generic-lens/lens использовать

A64m
04.10.2018
20:29:05
но его тоже можно взять из парметра функции, которая unwrapAndStringify использует

Artem
04.10.2018
20:30:30
chatId' = unwrapAndStringify @ChatId ... Error: Couldn't match representation of type ‘b0’ with that of ‘Integer’ arising from a use of ‘unwrapAndStringify’

A64m
04.10.2018
20:30:54
ну или не coerce я что-то из generic-lens/lens использовать
ну да, линзой на первую позицию можно из любой обертки с дженерик инстансом доставать

Alexander
04.10.2018
20:32:11
контекст

Всем привет. Есть ли в Haskell способ сделать деструктуризацию значения из конструктора полиморфно? Хотелось бы вместо этого: chatId' = (\(ChatId id) -> show id) . chatId . messageChat <$> mСделать что-то вроде этого: chatId' = show . UNPACK_CONSTRUCTOR_FN . chatId . messageChat <$> m

@js_monk chatId' = show @Integer . coerce .charId . messageChat <$> m не работает?

Artem
04.10.2018
20:34:03
Так работает

Alexander
04.10.2018
20:34:12
отлчино

Artem
04.10.2018
20:34:29
Спасибо большое :3

Alexander
04.10.2018
20:34:49
ты выше просишь привести к @ChatId

в то время как по условию задачи ты хотел наоборот к распакованному значению

с type applications понимаешь как работает

Artem
04.10.2018
20:37:12
Не особо

Alexander
04.10.2018
20:38:45
надо рассказывать?

Страница 1499 из 1551