
Alexander
17.09.2018
12:41:40
а fooViaBar имеет аргумент
@cblp_su ^
спросто я хотел набросать вариант, но не могу понять, что нужно
просто если там прокси, то проблемы не видно..

Google

Alexander
17.09.2018
12:46:28
ну и вообще если пример более понятный то было бы круче

Yuriy
17.09.2018
12:47:14
class CFoo a where foo :: TFoo a
class CFoo a => CFooBar a where foobar :: TFooBar a
class CFoo a => CFooBaz a where foobaz :: TFooBaz a
fooViaBar :: TFooBar a -> TFoo a
fooViaBaz :: TFooBaz a -> TFoo a
data X
instance CFoo X where foo = fooViaBar foobar
instance CFooBar X where foobar = (realImplementation)
data Y
instance CFoo Y where foo = fooViaBaz foobaz
instance CFooBaz Y where foobaz = (realImplementation)
теперь вроде должны сойтись
а реальный код вот https://github.com/ff-notes/ron/blob/master/ron/lib/RON/Data/Internal.hs

Alexander
17.09.2018
12:50:24
а хочется иметь CFoo, такое чтобы реализация foo определялась типом?
извиняюсь, что несколько туплю пока
т.е. как бы выглядел идеализированный пример

Yuriy
17.09.2018
12:53:37
хочется, чтобы было больше гарантий и меньше избыточности. в частности, хочется (1) гарантию, что не определены одновременно CFooBar и CFooBaz и (2) чтобы не писать тривиальный CFoo, а чтобы он сам автомагически выводился

Alexander
17.09.2018
13:02:16
+
методы принципиальны?
@cblp_su закрытое множество классов CFooBa* ?
для закрытого:
data Q = R | Z
class CFoo x (a :: Q) | x -> a where foo :: TFoo x
тогда ты не можешь определить только CFooBar или CFooBaz
1.hs:33:10: error:
• Couldn't match type ‘'Z’ with ‘'R’
arising from a functional dependency between:
constraint ‘CFoo Y 'R’
arising from the superclasses of an instance declaration
instance ‘CFoo Y 'Z’ at 1.hs:31:10-17
• In the instance declaration for ‘CFooBar Y’

Google

Alexander
17.09.2018
13:14:01
или:
1.hs:31:10: error:
Functional dependencies conflict between instance declarations:
instance CFoo Y 'Z -- Defined at 1.hs:31:10
instance CFoo Y 'R -- Defined at 1.hs:32:10
|
31 | instance CFoo Y Z where foo = fooViaBaz (foobaz @ Y)
для открытого множества это не сработает
но буков все равно столько же сколько у тебя
более хороший вариант это писать только CFoo
@cblp_su или что-то такое: https://paste.pound-python.org/show/k5lDF5glG3Qbemrjs1Q4/
CFoo определяет через какой тип ты работаешь, сможешь только один на тип определить
FooVia определяет realImplementation
fooVia' юзерский метод, который тупо работает
если бы realImplementation можно было бы куда-нить вынести или обобщить или вытащить в CFoo то тогда бы FooVia можно было бы автоматом получить
если у тебя есть зависимость, то можно втащить TFooBar в классы
инъективность т.е. есть
тогда можно TypeApplication в fooVia' выкинуть


Pineapple
17.09.2018
13:33:10
@cblp_su Я использовал такой подход:
class FooImpl (Impl a) а => Foo a where
type Impl a
foo :: Foo a => TFoo a
foo = defined via fooImpl
class FooImpl tag a where
fooImpl :: Proxy tag -> TFoo a
Но мне не были нужны разные TWhateverFoo

Alexander
17.09.2018
13:34:18
типы не сходятся?
1 строка

Pineapple
17.09.2018
13:34:51
У меня сходились. Я это для хитровывернутой сериализации
Ну может UndecidableInstances нужен

Alexander
17.09.2018
13:35:09
у тебя в контексте у FooImpl 1 параметр

Pineapple
17.09.2018
13:35:31
Забыл а

Google

Alexander
17.09.2018
13:35:43
так лучше :)
ну тоже 2 класса выходит, вроде как у меня в пасте
1 определяющий тег, второй строящий нужное по тегу

Pineapple
17.09.2018
13:36:44
О! Можно прямо по ним и диспетчирезоваться
class FooImpl t where
toTFoo :: t a -> TFoo a
class FooImpl (Impl a) => Foo a where
type Impl a
fooImpl :: Impl a a

Alexander
17.09.2018
13:36:47
и метод общий написанный через второй класс

Pineapple
17.09.2018
13:37:14
Ага

Alexander
17.09.2018
13:38:40
последний вариант мне нравится

Pineapple
17.09.2018
13:40:27
Да. Первый я придумал для того чтобы выбирать чем сериализовать данные (цбором, жсоном...)

Iliya
17.09.2018
14:16:37
Диму Маликова приглашали уже?

Roman
17.09.2018
14:17:34
он еще пишет свой новый трек "ты моя монада"

Sergey
17.09.2018
14:23:34

Alexander
17.09.2018
14:24:51
в @haskell_blah plz

Yuriy
17.09.2018
15:34:24

Alexander
17.09.2018
15:34:48
да неважно, читай что там ниже

Yuriy
17.09.2018
15:35:30

A64m
18.09.2018
09:01:53
все продолжают "циклы" чинить
https://github.com/ghc/ghc/commit/e655aac18c5b240f27fcaf26317ad87be5ce8b96
справедливости ради, они уже какие-то крохи добирают, по настоящему плохо они компилировались в 7.8, 7.10 и 8.0

Alexander
18.09.2018
09:07:41
> A quick run of NoFib revealed no regression or improvements whatsoever.

Google

Alexander
18.09.2018
09:08:37
удивительное рядом
разница в добавлении INLINE?
а почитал
> Notice that f does not inline into the RHS of c, because the INLINE pragma stops it;
почему?

A64m
18.09.2018
09:17:14
функция которая INLINE помечена должна в неизменном виде инлайнится, компилятор не может в нее заинлайнить что-то пока она сама не заинлайнилась

Admin
ERROR: S client not available

A64m
18.09.2018
09:19:24
это, видимо, для того чтоб правила перезаписи нормально работали, а то инлайним map который уже оптимизирован внутри и там правило ничего не находит, что правилу соотвествует, в результате с другим мапом не фьюзится

Alexander
18.09.2018
09:20:45
а логично

Hot
18.09.2018
10:02:14
А что за прикол с тремя кнопками?
Боты научились кнопки жать?

A64m
18.09.2018
10:05:46
сейчас еще и откатят наверное
эх, в воскресенье будет HIW, но что там расскажут мы никогда не узнаем, может через год выпустят видео в котором ничего не видно и не слышно, ну или не выпустят

Denis
18.09.2018
12:14:47

Alexander
18.09.2018
12:15:30
Haskell Implementors Workshop

Denis
18.09.2018
12:26:08
https://github.com/grin-tech/ghc-grin

A64m
18.09.2018
12:29:39
Они еще не сделали ничего рабочего
(даже на игрушечном уровне)

Yuriy
18.09.2018
12:29:59

A64m
18.09.2018
12:30:49
проще простого, конечно

Google

Artem
18.09.2018
12:33:00
Боюсь, вместе с дорогой из России побольше чем несколько сотен.

Alexander
18.09.2018
12:33:12
учитывая где это - несколько тысяч

A64m
18.09.2018
12:33:23
каждый год лететь через половину земли, разделяться на n-частей потому что разные доклады на icfp идут параллельно, идеально видеть и слышать, ведь повторять никто не будет

Andrei
18.09.2018
12:33:46

A64m
18.09.2018
12:34:10
правда любой зажопинский митап теперь выкладывает видео в 10 раз быстрее и в 10 раз лучше качеством
но не icfp
слишком серьезное мероприятие для этого
эх, в воскресенье будет HIW, но что там расскажут мы никогда не узнаем, может через год выпустят видео в котором ничего не видно и не слышно, ну или не выпустят

A
18.09.2018
12:35:05
а зачем вообще этот ghc-grin ?

Artem
18.09.2018
12:35:17
Медленно это из-за конкретного человека, насчёт качества: само икфп в норм качестве, а вот воркшопы никак не осилят, да

A
18.09.2018
12:35:30
название стрёмное) усмешка

Andrei
18.09.2018
12:35:32
ну это да

A64m
18.09.2018
12:35:38
да и само icfp обычно говно

Timofey
18.09.2018
12:35:43
Я не из зажопинска, но митап у нас настолько убогий, что ни видео, ни слайдов. Да и желания туда ходить уже тоже нет

A64m
18.09.2018
12:36:48

Alexander
18.09.2018
12:37:20