Vitaly
Ага, свежачок
Vitaly
Alexander
кстати не очень, большой плюс, что все структуры из Haskell98 автоматически линейные
Alexander
соотвественно, мне не нужно было их переизобретать
Alexander
в идрисе я примерно на переизобретении завис
Alexander
другое дело, что в идрисе можно сделать OrdL доказанным, а тут нельзя и нужно полагаться на то, что он правильный
Alexandr
На радость @bravit111 предлагают ввести административную ответственность за кибербуллинг:
https://twitter.com/batyshkaLenin/status/971928947389845505
sherzod
@qnikst Крутая у вас команда. Она распределённая?
Alexander
в основном да
Alexander
есть офис в париже, где достаточно человек, и удаленщики
Alexander
но те кто во франции не всегда в офисе
sherzod
Круто. А у sparkle есть коммерческие клиенты (если не секрет)?
Alexander
есть
Alexander
собственно это оно под клиентов и было сделано
sherzod
Здорово!
Vitaly
Oleg
Alexander
можно уточнить вопрос, не уверен что я правильно его понял
Alexander
в общем, все стрелки что есть в конструкторе данных считаются линейными
Oleg
ну т.е.
data Data = C1 x y | C2 z | C3 на уровне линейной типизации будет эквивалентно
(x ⊗ y) ⊕ z ⊕ 1 ?
Oleg
судя по утверждению насчёт сортировки списков - похоже, что так
Alexander
да, так
Alexander
@odomontois если нужно делать не линейные варианты то это можно через GADT синтакс, и тогда свои суммы и произведения можно сделать
Alexander
как найти в какой lts входит пакет определнной версии?
Alexander
если я правильно понимаю - то да
Alexander
(про lts нашёл ответ)
Leonid 🦇
http://www.well-typed.com/blog/2018/03/oop-in-haskell/ астрологи объявили неделю блогов от известных контор
Leonid 🦇
После стольких лет до меня таки дошло что fix останавливаеться также как и foldr
parket
A64m
> The intention is to be sufficiently expressive to handle most if not all of the "undecidable" instances used by the mtl, lens and other libraries today in a manner that assures users of termination, and so doesn't induce the terror many users fear at the sight of UndecidableInstances.
Leonid 🦇
Меня всегда fix пугал
parket
Leonid 🦇
Ну значит что функция не форсит аргумент
Leonid 🦇
Антон
Так, а чем Fix отличается от Mu?
Alexandr
Всем привет, кто-нибудь может объяснить, пожалуйста, как это так??
f :: a -> b
g :: c -> b
:t g . f
a -> c
Alexander
:i (.)
Anonymous
Aleksei (astynax)
у g тип неправильный же
Aleksei (astynax)
b -> c должен быть
Alexandr
(.) :: (b -> c) -> (a -> b) -> a -> c видимо я чего-то совсем не понимаю
Alexandr
а вот нет у g с -> b
Alexander
Anonymous
Так, это вообще какая-то разность функций получается
Alexandr
это ghci
Anonymous
Определения f и g - в студию
Alexander
или :i (.) не оттуда же, или ошибка при копировании
Alexandr
писал профунктор:
newtype PreYoneda f a x y = PreYoneda ((a -> x) -> f y)
instance Functor f => Profunctor (PreYoneda f a) where
-- dx -> ye -> ((a -> x) -> f y) -> ((a -> d) -> f e)
dimap :: (d -> x) -> (y -> e) -> PreYoneda f a x y -> PreYoneda f a d e
dimap dx ye (PreYoneda ax_fy) = PreYoneda $ \ax -> fmap ye (ax_fy (dx . ax))
Alexandr
все сжалось:( ща
Alexandr
https://i.imgur.com/xOOYBzs.png
Alexander
Prelude> :t f
f :: a -> b
Prelude> :t g
g :: c -> b
Prelude> :t g . f
g . f :: a -> c
`
Alexander
вон все как просили
Alexandr
https://i.imgur.com/PBIN8PQ.png
Alexandr
я думал-думал как реадизовать инстанс, но не придумал и списал, и никак не могу понять dx . ax :: a -> d
Alexander
(dx :: d -> x) (ax :: -> a -> d) => dx . ax :: (a -> x)
Alexander
при чем и почему здесь a -> d?
Alexander
Kirill
Kirill
точней по-моему там ghc унифицирует разные типопеременные
Alexander
Prelude> let g = undefined :: c -> b
Prelude> let (.) = undefined :: (c -> b) -> (a -> b) -> c
Prelude> let (.) = undefined :: (c -> b) -> (a -> b) -> (a -> c)
Alexander
@basov_ae того, что было написано достаточно для моего комментария? разве в нём что-то было не так?
Alexander
Kirill
т.е. ты точку ввёл неканоническую чтоль?
Alexander
да
Alexander
нет, конечно
Alexander
астои
Alexander
стоп.. секунуду
Kirill
стандартная точка c унифицирует с b:
λ> :t \(g :: c -> b) (f :: a -> b) -> g . f
\(g :: c -> b) (f :: a -> b) -> g . f
:: (c -> c) -> (a -> c) -> a -> c
Alexander
PreYoneda f a d e ~ ((a -> d) -> f e)
ax_fy :: ((a -> x) -> f y)
ax :: a -> d
dx :: d -> x
dx . ax :: a -> x
Alexander
это передается в ax_fy как и надо : as_fy (dx.ax) :: f y
Alexander
ye :: y -> e, fmap ye (as_fy (dx.ax) :: f e
Alexander
вроде все как надо
Alexandr
что-то я видимо сам себя запутал, спасибо