Чтобы добавлять сообщения и комментарии, .

@segfault:
segfault

Тем временем в реальности
github.com

@alar:
alar

Есть class ParseArgs a и к нему
instance ParseArgs (Either WTF a)
instance (ParseArgs r, EType a) => Parse Args (a->r)
instance (ParseArgs r, EType a) => ParseArgs (Maybe a -> r)

что даёт нам ошибку Overlapping Instances, патамушто GHC неоткуда узнать, что instance EType (Maybe x) невозможен.
Какие возможны варианты лечения?
Нагуглить расширение языка, которое сделает закроет класс EType?
Огородить параметр a конструктором newtype Req a = REQ a ?
Заменить полиморфный instance (ParseArgs r, EType a)=> ParseArgs (a->r) на пачку частных случаев instance ParseArgs r => ParseArgs (Double -> r) ?

@segfault:
segfault

А я тут хаскельным квикчеком нашёл весёлый кейс

> d = new Date(2006, 02, 26, 02, 28, 53);
Sun Mar 26 2006 03:28:53 GMT+0600 (+06)
> d = new Date(2006, 02, 26, 0, 0, 0);
Sun Mar 26 2006 00:00:00 GMT+0500 (+05)
> d = new Date(2006, 02, 26, 1, 0, 0);
Sun Mar 26 2006 01:00:00 GMT+0500 (+05)
> d = new Date(2006, 02, 26, 2, 0, 0);
Sun Mar 26 2006 03:00:00 GMT+0600 (+06)
> d.getHours()
3

Работает в последнем хромаче, в фоксе, наоборот, час становится на 1 меньше. Гуголь чет ни чего не говорит по этому поводу. Я первооткрыватель?

@segfault:
segfault

Такие дела ...

@blaze:
blaze

придумайте мне кошерный способ открыть файл, проверить что это обычный файл, а не пайп какой-нибудь, узнать его last mod time и размер, а потом вычитать данные в lazy bytestring. Что-то там нужно в одном месте Fd, в другом Handle, одно в другое конвертируется плохо, а если еще и про исключения думать, то вообще какая-то фигня трехэтажная.

@blaze:
blaze

а есть какие-нибудь стандартные пути сравнения древовидных структур, кроме написания рекурсивного обхода? Мне надо разницу между двумя Directory.Tree отыскать.

@max630:
max630

кстати, вот вы про переполнение буфер говорите, а fromIntegral проверяет лимиты-то? вот у меня есть код который длину возвращает unsigned long, а allocaBytesAligned хочет Int. Я пишу fromIntegral и всё, дырища?

@qnikst:
qnikst

Линейные типы всем и каждому! edsko.net про нас тоже сказано

@Renha:
Renha

То чувство, когда отлаживаешь программу долго и мучительно, а оказывается что беда была в > вместо >=.

Я что спросить хотел, как с такого рода ошибками в более других чем C языках дело обстоит? Сразу отмечу что статический анализатор ничто не сказал потому что ошибка алгоритмическая. Что там хаскель? Что теоретически можно придумать чтобы в torth сделать лучше?

@blaze:
blaze

только сейчас заметил, что ни в шаблоне из stack, ни в моей библиотеке в test/Spec.hs нет заголовка модуля. А что, так можно было?

@ndtimofeev:
ndtimofeev

michaeljflynn.net

Что говорит этот человек?

@segfault:
segfault

hackage.haskell.org
Отличное название.

@qnikst:
qnikst

Есть немного матметода, вот упороться и реализовать ли его на cmm, или таки по человечески обычным способом. Неопти визирование Reference implementation уже есть

@max630:
max630

а что, если в .cabal у меня test-suite секция, то там точно надо перечислять всё-всё то же самые пакеты и модули которые в основном коде? как-нибудь указать что "то же что и в library" нельзя?

@qnikst:
qnikst

plus.google.com

@max630:
max630

кстати по поводу #2857402 Вы думаете, язык вас подводит когда приходится использовать макросы. На самом деле он вас подводит, когда типы выводятся неправильно, но вы об этом на этапе компиляции не узнаёте.

@trapdoor:
trapdoor

stephendiehl.com

Да это же даже лучше, чем HCAR!

@qnikst:
qnikst

а поддержку graphviz или ascii-graph (или как оно правильно зовётся) в хаддоки ещё не завезли?

@ndtimofeev:
ndtimofeev

type family TestTail t where
    TestTail (HList xs) = xs
    TestTail t          = '[t]

data HList xs where
    HCons :: x -> y -> HList (x ': TestTail y)

Интересно, зачем я всегда добавлял Nil в гетеросписки?

@alar:
alar

*maven *docker *nix *СЯУ: stack умеет собирать в докерные образа и nixовые окружения. Чтобы изоляция была уж совсем уж изолированной и воспроизводимой. А когда maven такое начнёт делать?

@segfault:
segfault

geektimes.ru

@alar:
alar

Хотеть instance RealFrac Integer where floor,ceil,truncate,round = from Integral
— допустимо или это Scala головного мозга?

@qrilka:
qrilka

а никто не в курсе где Elastic хачкель использует?

@max630:
max630

gist.github.com фух

@agr:
agr

Вдогонку к #2856249. Лень было gdb ставить. Всё оказалось весьма тривиально. Пересел с 8.0.x на 7.10.2 — стало падать вменяемое исключение ErrorClosed, а не segfault.

Клиент закрывает сокет быстрее, чем сервер успевает отдать файл. Ну чо, всё на поверхности.

@qnikst:
qnikst

simonmar.github.io

@max630:
max630

скажите, а вот например тут почему alignment = sizeOf, вообще зачем ему быть больше, там, 8, и что то этого зависит?

@ndtimofeev:
ndtimofeev

Есть тип data Box (xs :: [*]) where { Box :: (KnownNat n, Elem a xs ~ 'True) => a -> Proxy n -> Box xs }, есть типофамилия что-то вроде ForAll (cxt :: * -> Constraint) (xs :: [*]), которая конструирует констрейнт путём применения cxt ко всем типам в списке xs. Теперь я хочу функцию вида withBox :: ForAll cxt xs => Proxy cxt -> Box xs -> (forall a. cxt a => a -> t) -> t, которая будет применять функцию про констрейнт к содержимому коробки при условии, что для всех возможных вариантов содержимого коробки констрейнт определён.

@blaze:
blaze

хочу одинаковый интерфейс к tls сокетам и обычным, нужны send, recv и close. Как лучше сделать, record c полями-фунциями, или typeclass и instances?

@qnikst:
qnikst

While we are still trying to get 8.0.2 out the door, 8.2.1 is quickly
approaching.

вот всегда так

@blaze:
blaze

А кошерно использовать нестандартные Prelude, если пишешь библиотеку? И какие от этого будут проблемы?

@ndtimofeev:
ndtimofeev

Пытаюсь уговорить себя не делать logger nullary type class'ом. Получается с трудом.

@max630:
max630

а помните был текст про Arrow где тип был что-то вроде A a = A ([Path], IO a), и они заранее собирали все затронутые пути? Не поможете ссылку найти?

@ndtimofeev:
ndtimofeev

Есть планировщик шины представленный клиентам обёрткой вокруг Async'а и TQueue с тасками. Конструктор обёртки в IO запускает тред в котором крутится планировщик, который работает тоже внутри IO. Теперь я хочу заменить IO на (MonadIO m, MonadMask m, MonadLogger m) => m и не могу придумать как пропихнуть сферическую монаду в вакууме в форк.

@qnikst:
qnikst

офигеть, simonmar не зарезал мой патч! картинка_с_плящущим_негром.apng

@qnikst:
qnikst

у меня есть:

data Scope = forall a . Serialise a => Scope String (Proxy# a)

есть:

scope :: StaticPtr Scope -> ....

хочу:

scope :: StaticPtr Scope -> a -> ...

и вот этот a должен быть связан с тем. что в Scope, при этом добавить типа-параметр для Scope a нельзя. Это вообще реально?

@blaze:
blaze

а кто-нибудь освоил stack hoogle? Если я его инициализирую через stack hoogle --setup, то он не видит пакетов из base. А если запустить stack hoogle generate, то он выкачивает весь hackage и всё видит, только вот ссылки ведут не на локальную копию, а в интернет.

@blaze:
blaze

basic-prelude или classy-prelude?

@ndtimofeev:
ndtimofeev

Зачем-то пару месяцев назад написал логгер для программы в который в качестве записей передаются не сериализованные структуры. Сейчас не могу вспомнить зачем мне это было нужно.

@qnikst:
qnikst

какие похожие программы и какие разные результаты.

* paste.pound-python.org
* paste.pound-python.org

опять лезть в RTS :/