
Alexander
28.03.2018
20:59:23
нет конечно
чатик разделился на мертвый, blah и тот где говорят про коалгебры
даже до появления этого
мне конечно пытались много раз сказать, в чем бонус отдельного чятика, но я так и не понял

Google

Alex
28.03.2018
21:03:11
Спасибо большое
С каиндами понятно

kana
28.03.2018
21:21:27
class X a where f :: a -> Int
newtype Z = Z Int
instance X Z where f (Z x) = x
instance X a => X (a, b) where f (x, _) = f x
instance X b => X (a, b) where f (_, y) = f y
x = f (0, (0, (Z 1, (0, 0)))) -- ожидаю 1
Duplicate instance declarations:
instance X a => X (a, b)
instance X b => X (a, b)
вот тот пример, overlaps мне не помог никак
почему не работает - понимаю, как решить задачу - нет

Alexander
28.03.2018
21:24:32
ну в конекст же не смотрит компилятор
X (a,b) == X (a,b)

Denis
28.03.2018
21:24:48
можно через ~
в контексте

kana
28.03.2018
21:29:02
вот текущее рабочее рашение, но тут дублирование кода шаблона Z
newtype Z = Z Int
class X a where f :: a -> Int
instance X Z where f (Z x) = x
instance X (Z, b) where f (a, _) = f a
instance {-# OVERLAPS #-} X b => X (a, b) where
f (_, y) = f y
x = f (0, (0, (Z 1, (0, 0))))

Alexander
28.03.2018
21:36:28
эм..
нужно же {-# OVERLAPABLE #-} X b и {-# OVERLAPS #-} X (Z,b)

Alex
28.03.2018
21:43:09
Я понял что такое прокси
Но я не понимаю
Зачем его использовать

Google

Alex
28.03.2018
21:43:25
Час ушел

Alexander
28.03.2018
21:44:26
например у тебя есть код вида show . read
хотя нет, прокси просто элемент чтобы тип можно было передавать вместе с термом
без type applciations

Anatolii
28.03.2018
21:58:28
а ViewPatterns и lambda case можно как-то совместить в одно?

Denis
28.03.2018
21:59:18

Anatolii
28.03.2018
22:03:19
Спасибо, я уже не помню что я писал что оно у меня не работало :)


Alexander
28.03.2018
22:09:18
@kana_sama equality я ещё вижу как вытащить, но не произвольный констрейнт
получилось!
{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE PolyKinds #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeApplications #-}
import Data.Proxy
class X a where f :: a -> Int
newtype Z = Z Int
instance X Z where f (Z x) = x
data T = L | R
type family IF t a b :: k where
IF 'True a b = a
IF 'False a b = b
type family When t a :: k where
When 'True a = a
type family Or a b where
Or 'True a = 'True
Or a 'True = 'True
type family XQ a where
XQ Z = True
XQ (a,b) = Or (XQ a) (XQ b)
XQ c = False
type family XQW z :: T where
XQW (a, b) = IF (XQ a) 'L (When (XQ b) 'R)
instance (z ~ (a,b), XX (XQW z) a b) => X (a,b) where
f (a,b) = ff (Proxy @ (XQW (a, b))) a b
class XX (t :: T) a b where ff :: proxy t -> a -> b -> Int
instance X a => XX 'L a b where ff _ a _ = f a
instance X b => XX 'R a b where ff _ _ b = f b
x = f (0::Int, (0::Int, (Z 1, (0::Int, 0::Int))))
но это ужас хтонический
@kana_sama ^
получается констреинты дублируются через семейства, для того, чтобы было понятно какую ветку выбирать
и соотвественно выбирается ветка через вспомогательный класс
там у нас уже есть выбор т.к. мы вводим доп параметр, под направление
семейства должны быть написаны так, чтобы инстанс в этой ветке у нас был
как-то это через FD должно быть можно записать в т.ч. (наверное)
но чот я давно олеггирингом не занимался


kana
29.03.2018
05:04:22

Google

kana
29.03.2018
05:04:26
Спасибо
а что, Nat из GHC.TypeLits нельзя матчить (чтобы S k забрать например)?
+ 1 использовать нельзя, он не *ективный

Alexander
29.03.2018
06:23:08
нельзя, он же не индуктивный

kana
29.03.2018
06:27:36
а к своим типам сахарок для литералов на тайплевеле нельзя прикрутить, верно?

Alexander
29.03.2018
06:52:30
чтобы они работали как литс вроде нет

Yuuri
29.03.2018
06:54:49
Имплементация data с единственным строгим полем как-нибудь отличается от newtype?

Aleksey
29.03.2018
06:56:51
Да, отличается
newtype будет выкинут компилятором
т.е. не будет заворачивания-разворачивания
К тому же мы уже тут натыкались на то, что парсер на newtype работает, а на энергичном data - нет

Yuuri
29.03.2018
07:00:44
То есть даже в энергичном data будет лишний боксинг?

Aleksey
29.03.2018
07:08:35
конечно

Yuriy
29.03.2018
08:12:48
даже в анпакнутом будет лишний конструктор, подозреваю

Alexander
29.03.2018
11:24:43
test?

A64m
29.03.2018
11:28:24

Alexander
29.03.2018
11:29:27
в смысле что указатель будет
data X = X {-# UNPACK #-} !Y тут будет заколовок, но не будет indirection

Google

Leonid
29.03.2018
11:31:42
ping

ParkeT
29.03.2018
11:31:53
pong
Опа, телега ожил.

Alister
29.03.2018
11:33:07
потому что у нее Хаскеля нет
а все падает почему

Alexander
29.03.2018
11:34:04
обратное польское цитирование

Alexander
29.03.2018
11:41:12
почему это?
ну объектный кусок со ссылками на инфотейлбы то будет?
это не боксинг конечно

A64m
29.03.2018
11:42:03
будет, но без индирекшона это не боксинг
то что полный эквивалент ньютайпа не сделать так - это, естественно, правильно было сказано

Alexander
29.03.2018
11:44:09
ну я вроде так писал выше
Prelude GHC.HeapView> getClosureRaw x
(0x00007fc848b3d0c0,[140498189930704,283479762992],[0x0000004200b5e830])
Prelude GHC.HeapView> getClosureRaw y
(0x00007fc840dc71e8,[140498058375672,42],[])
что обёртка будет а индирекшена не будет
правда телеграм отдыхал, может не отправилось
из одного поста:
> Interestingly, Go, the language that is closest to the original UNIX philosophy, encourages handling network connections this way, but is still features a select{} statement.
так то!

Alister
29.03.2018
11:47:21

Alexander
29.03.2018
11:47:23
не то что ваши хаскели

Евгений
29.03.2018
11:58:03
Кривовато обновили, лул
Я, конечно, бывает роняю при обновлении продакшон, но не настолько

Google

Leonid
29.03.2018
12:02:38
Дуров сказал что электричество в датацентре пропало
Врёт поди

Дед Пегас
29.03.2018
12:02:58
СОРМ ставили, инфа 100%

Leonid
29.03.2018
12:04:44
Ну и ладно, хоть чатик искать не надо будет

A64m
29.03.2018
12:09:12
на Лубянке (где и находится датацентр телеги) просто проводили противопожарные учения и отключали электричество

Евгений
29.03.2018
12:09:28

Дед Пегас
29.03.2018
12:09:38
Типичный Дуров.

Евгений
29.03.2018
12:09:54
Ну вообще телеграм последнее время нагибается под нагрузкой
За последние три недели это уже второй раз

Leonid
29.03.2018
12:15:36
На пхп написан поди

Roman
29.03.2018
12:20:53
типичный хаскель канал

Alister
29.03.2018
12:22:20

Denis
29.03.2018
12:26:19
угу, с unbox-strict-fields будет один конструктор для самого типа

Leonid
29.03.2018
12:28:01
Чё, ребзя, кто в биокад пойдёт завтра на @bravit111?

? animufag ?
29.03.2018
12:54:14
на самом деле тема кажется какой-то размытой
но в принципе чё б не сходить

Pineapple
29.03.2018
13:02:35

Alexander
29.03.2018
13:03:34