Artyom
если я просто юзаю buffer и больше ничего, что мне грозит?
Alexander
@lightgreen скорее всего ничего
Alexander
там не большие изменения будут
Oleg
а можно поподробнее?
а то я ничего не понял
для того, чтобы, выражаясь вашими словами система имела смысл (soundness), в экспериментальной версии scala по имени dotty запрещают проводить мостик между top и bottom типами Any и Nothing вот такого рода
type A >: Any <: Nothing
иначе сам факт наличия такого type member без единого объекта, его содержащего, сколлапсил бы всю систему типов в одну точку Any =:= Nothing
Антон
А зачем вообще нужен Top?
Alexander
Top не обязателен, но с ним удобно
Artyom
@qnikst раз уж так, то спрошу ещё про кондуиты
есть какой-то кондуит, который считает элементы и делает что-то после каждого N-ного?
Alexander
не думаю, что изкоробки есть
Alexander
я такое руками делал обычно, но я не мастер
доня.
для того, чтобы, выражаясь вашими словами система имела смысл (soundness), в экспериментальной версии scala по имени dotty запрещают проводить мостик между top и bottom типами Any и Nothing вот такого рода
type A >: Any <: Nothing
иначе сам факт наличия такого type member без единого объекта, его содержащего, сколлапсил бы всю систему типов в одну точку Any =:= Nothing
ага, понял, спасибо
но это я немного не так выразился, речь шла не о soundness, а о том какой практический смысл у операции
Переслано от Антон же сказал типа "зачем складывать боттом и юнит, в этом же нет смысла", а это soundness никак не нарушает и непонятно зачем делать для этого случая исключение и запрещать его, я вот об этом говорил
Oleg
Влод
Антон
Да, вы тут напомнили — как выразить в Haskell тот факт, что для всех типов, для которых реализован класс типов Foo, автоматически реализовывается класс типов Bar, но при этом не делать Foo констраинтом на тип?
Антон
Oleg
учитывая, что всё-таки речь о языке с субтайпингом , странно искать практический смысл сначала спроецировав на F
Oleg
Зигохистоморфный
Newtype + GeneralizedNewtypeDeriving
Антон
ньютайпом
А чуть подробнее? А то DataTypeContexts задепрекейтили зачем-то
Зигохистоморфный
или я не понял вопрос)
Alexander
Да, вы тут напомнили — как выразить в Haskell тот факт, что для всех типов, для которых реализован класс типов Foo, автоматически реализовывается класс типов Bar, но при этом не делать Foo констраинтом на тип?
во первых, нету смысла так делать, т.к. если из Bar следует то, что это и Foo, то тогда нужно писать констреинт, другое дело что нет
Alexander
тогда через DefaultInstances или как там его
Alexander
class Bar where
bar :: Bar a
default bar :: Foo a => Bar a
bar = foo
Антон
Зигохистоморфный
Зигохистоморфный
только как импрувмент в будущем
Alexander
Зигохистоморфный
тут обсуждали
Alexander
чсв > 80000
Alexander
instance forall a . Foo a => Bar a <=> instance Foo a => Bar a
кана
тыкаете свои forall а потом думаете, что это новые фичи
Антон
А, стоп
Alexander
Антон
Я неправильно понял
Alexander
пожалуйста, если играешь в проксю - проксируй все
Антон
Это ж констрейнт в экземпляре, а не в объявлении класса типов
Alexander
Зигохистоморфный
Alexander
как? зачем? почему?
Alexander
это другой инструмент
Alexander
тут мы только говорим, как зоделать дефотную имплементацию метода
Alexander
придётся правда писать instance Bar A для всех типов
Alexander
но там идеальных решений нету
Alexander
{-# OVERLAPPABLE #-}
instance (Foo a) => Bar a where
bar = foo
{-# OVERLAPPING #-}
instance Bar Int where
bar = 6
Alexander
если Int не реализует Foo
Alexander
тогда для всех типов, у которых есть Foo инстанс для Bar будет изкоробки, причем можно определить и для других
Alexander
но потом пойдут вопросы, а для тех кто реализует Baz тоже надо и что делать, особенно для типов, которые и Foo и Baz умеют
Alexander
а в stm-conduit с entangledPair вообще не ясно что делать
Антон
Alexander
на этом моменте пойдут и будет все плохо
Alexander
т.е. если для одного класса можно через этот путь или default signatures то, если хочется 2 дефолта то ещё придётся запихнуть метод это разрешающий
Alexander
что возможно, но выглядит как костыли
Alexander
хотя я не уверен, что в этом мире есть подходящее решенеие без явного указания что вызывать в любом из языков
Alexander
где есть множественное отношение принадлежности
Alexander
и по этому отношению строется инстанс
Alexander
@lightgreen похоже обновление stm-conduit откладывается минимум до завтра
Alexander
там все сложно
Зигохистоморфный
интересно https://github.com/nfrisby/coxswain
Зигохистоморфный
https://ghc.haskell.org/trac/ghc/wiki/Plugins/TypeChecker/RowTypes/Coxswain
Зигохистоморфный
@A64m_qb0 ^
Зигохистоморфный
http://hackage.haskell.org/package/HList-0.2.3/docs/Data-HList-GhcSyntax.html
Anonymous
скорее наоборот как раз
Anonymous
Void терминальный
Unit инициальный
(или наоборот)
Alexander
врятли наоборот
Alexander
хотя я всегда путаюсь
Vladislav
Void начальный, Unit конечный
Vladislav
Потому что из Void к любому другому объекту стрелка начинается (absurd), а в Unit заканчивается (const ())
Alexander
а да
Anonymous
мнемоника, в категории множеств начальный - пустое множество, а конечный - одноэлементное
Alexander
а в логике False и True
Alexander
или не True? то, что из False все следует это ясно
Vladislav
Если стрелка импликация то да, True из чего угодно можно заключить
Cheese
и в религиях из небытия возникает Монада (пифагорейская)
Anonymous
@qnikst, если рассматривать исчисление высказываний в форме натурального вывода как категорию, то да, False и True. это можно глянуть у Стива Ауди или у Ламбека-Скотта еще
Aliester
Быстрые свидания бесполезны. 30 секунд не хватает для того, чтобы объяснить все преимущества функционального программирования на Haskell.
Dmitry
👍