Dmitry
А, даёт всем, только учитывает от новичка
Alexander
как это связано с IRC?
там нельзя newline в сообщении и ограничена длина сообщения. В итоге возникает привычка писать одно предложение в сообщении.
Cheese
там нельзя newline в сообщении и ограничена длина сообщения. В итоге возникает привычка писать одно предложение в сообщении.
многие люди пишут в таком стиле даже без опыта IRC, просто потому что он копирует устную речь, когда собеседник начинает тебя слышать, понимать и подбирать ответ до того, как ты закончил свою мысль
Евгений
Звучит как опыт культуры, в которой перебивать собеседника считается нормой
Cheese
нет. не звучит. перебивать — это говорить во время говорения, а возражать вежливо можно между репликами
Андрей
😀
Anonymous
кажется, никто не отозвался на APS. а как это связано с Хаскелем?
Никак не связано. Хаскел users наиболее опытные. У кого, как не у них поинтересоваться? Ну раз, нет тут людей, сталкивавшихся с данным "чудом", то прошу прощения за оффтопик.
Alexander
не факт, с подобными технологиями тут не очень
Alexander
никто wai-prometheus к серванта не прикручивал ещё?
Ilya
http://hackage.haskell.org/package/mmorph-1.1.1/docs/Control-Monad-Morph.html#t:MMonad
Ilya
Что это Монада над Монадами? Какой интересный пакет
Ilya
Что это Монада над Монадами? Какой интересный пакет
Может кто объяснит, как^w зачем этим пользоваться
Alexander
хочет от тебя функция Conduit IO a b
Alexander
а у тебя только функция работающая в ResourceT IO
Alexander
если у тебя есть преобразование из второго в первое, то ты можешь его передать
Alexander
ну и вообще изменение "внутренности" стека
Ilya
Это всё нужно потому что монады не композятся?
Ilya
То есть, так как у нас не композиция монад, а именно накручены трансформеры, мы уже не можем лазить по стеку обычным fmap'ом
Ilya
Короче примерно понятно
kosc
Утра! А есть в Haskell функция, позволяющая подсчитать число вхождений определённого элемента в список?
kosc
А то гугл предлагает велосипедить.
Dmitry
length $ filter isElement list ?
kosc
Ну почему бы и нет.
kosc
Спасибо!
Dmitry
Ещё тут можно посмотреть: http://hayoo.fh-wedel.de/?query=(a+->+Bool)+->+[a]+->+Integer
Dmitry
Ну т.е. поискать по сигнатуре: (a -> Bool) -> [a] -> Integer
kosc
Ого, а вот это реально крутая фишка!
Dmitry
Век живи, век учись!
kosc
А то!
kosc
А можно задавать какие-то ограничения у типов, определённых через data?
kosc
Например, у меня есть тип Line, и я хочу указать, что start не может быть больше или равен end.
kosc
data Line = Line { start :: Int, end :: Int } deriving (Show)
kosc
Вот сам тип
Dmitry
В Haskell -- вряд ли.
Dmitry
Но можно попробовать end :: Int заменить на length :: Word
Dmitry
Вот это не знаю, ещё не начал изучать. Пусть другие ответят
kosc
Идрисоводов ещё пойду в чате про deptypes спрошу.
Dmitry
Да проще уж с length :: Int :)
Dmitry
Или даже length :: Word, но потом замучаешься fromIntegral писать
kosc
Выглядит как-то костыльно, если честно.
kosc
Подождём, пока проснётся @qnikst
Dmitry
Ну почти во всех библиотеках такое, тот же Vector именно так устроен, т.е. там начало и его размер, а не начало, конец.
kosc
Кстати да, я только что понял, что сам Line - велосипед.
kosc
Хотя для обучения велосипедостроение вполне себе ок.
Alexander
а чт
Alexander
?
kosc
@qnikst вкратце - вот.
kosc
Например, у меня есть тип Line, и я хочу указать, что start не может быть больше или равен end.
kosc
data Line = Line { start :: Int, end :: Int } deriving (Show)
Dmitry
:)
kosc
С добрым утром.
Alexander
забей на это, сделай умный конструктор. или синглетоны
kosc
Ну даже если так, возмность-то есть такая или нет?
Dmitry
Даже если есть в том же Idris, тебе придётся страниц 5 теорем доказывать. Проще уж инкапсулировать Line в 2-3 функции.
Dmitry
Но я не знаток, может, другие подскажут, как в 4 страницы сделать ;)
Aleksei (astynax)
начало и конец на Nat и неравенство на type famity.
Aleksei (astynax)
Но не стоит того. Smart constructor, как уже выше сказали, обычно норм
Aleksei (astynax)
Если взять длину в Nat, то можно и без TF обойтись по идее
Dmitry
Тем более всегда ж можно сделать end Line{..} = begin + length
Aleksei (astynax)
Потому как "ненулевая длина", это Succ a
kosc
Если бы я чего для прода на этом писал - и подход был бы другой.
Aleksei (astynax)
Нет смысла накладывать ограничения на один конструктор - Line может получиться вырожденной в результате неких вычислений. Поэтому либо Nat таскать вместо Int и тайплевельную же арифметику, либо пользовать mkLine :: Int -> Int -> Maybe Line
Kirill
никто wai-prometheus к серванта не прикручивал ещё?
ты про wai-middleware-prometheus ? тож просто мидлварь
Kirill
там с гранулярностью как-то ниоч с ваивскими метриками, поэтому я кастомные делал
Pavel
Если взять длину в Nat, то можно и без TF обойтись по идее
Несколько раз уже видел аббревиатуру TF. Что это значит ?)
Dmitry
Type Family
Dmitry
Tensor Flow ;)
Dmitry
Выбирай нужное
kosc
В общем, если кому не жалко свободного времени - проревьюйте код. Вот задача: https://tproger.ru/problems/nested-segments/ Вот решение: https://hastebin.cuttlerat.ru/qemimezumi.hs
Dmitry
http://hackage.haskell.org/package/fingertree-0.1.4.1/docs/Data-IntervalMap-FingerTree.html
Dmitry
Готовое решение ;)
Dmitry
Да я для обучения :)
kosc
А вообще прикольно, да.
Pavel
Type Family
предположу что это 😊
Dmitry
Многие алгоритмы на Finger Tree работают