Size: a a a

2021 May 03

[

[BRM]White Rabbit in Haskell
после фримонад, как мы знаем, идут монады посвободнее
источник

JS

Jerzy Syrowiecki in Haskell
freer — это только альтернативная реализация, а идея та же, что и у free
источник

JS

Jerzy Syrowiecki in Haskell
или я путаю?
источник

Y

Yuuri in Haskell
Тут вон выше говорили, что и final tagless альтернативная реализация, не знаю, кому верить
источник

Y

Yuuri in Haskell
А ещё мне бывший коллега чего-то задвигал про некие свободные профункторы, как лишённые недостатков фримонад, что это за тема вообще?
источник

[

[BRM]White Rabbit in Haskell
просто вспомнился "разговорник хаскелита", который далеко выше кидали.
Там free monad перевели как "свободная монада", а freer monad сразу после как "монада посвободнее".
Жду, когда сделают "ваще капец какая свободная монада".
источник

JS

Jerzy Syrowiecki in Haskell
это же сравнительные степени прилагательных. их всего 3:

free — свободная
freer — более свободная (посвободнее?)
freest — свободнейшая
источник

KV

Kirill Valyavin in Haskell
Возможно, речь про прозрачность термов, в выражения из свободных стрелок можно посмотреть, а в выражения из свободных монад нет, потому что там продложения
источник

[

[BRM]White Rabbit in Haskell
вот ведут freest monad и у нас работы больше не станет
источник

KV

Kirill Valyavin in Haskell
Не, без работы не останемся. Любой нормальный бизнес понимает, что не бывает никаких free monads, в самом лучшем случае бывает cheap, если удачно договориться
источник

Y

Yuuri in Haskell
Там акцент был на производительность, что свободные монады не инлайнятся
источник

KV

Kirill Valyavin in Haskell
А, тогда ничего не могу сказать
источник

¯

¯\_(ツ)_/¯ in Haskell
да, точно, ведь эти вещи тесно связаны. спасибо
источник

IO

I O in Haskell
Не очень понятно что имелось в виду: фри монада фри монаде рознь; дефолтные Free = Pure | Free инлайниться вряд ли будут, у них интерпретаторы рекурсивные, а вот church encoded/Codensity вполне себе должны. Проблема только в том что рекурсивные монадические функции все равно все сломают.

Через просто профункторы как effect system-like мало что выразить, так что это скорее к стрелкам/Strong, а там в плане инлайнинга если я правильно понимаю то же самое что и с фри монадами: наивное представление будут рекурсивными, church encoded будут инлайниться для нерекурсивных случаев. (Поправьте пж если не прав)

Так что в этом плане лучше всего наверное tagless final, там даже рекурсивная функция все равно может специализироваться. Хотя в real-world случаях все равно вряд ли, см. effects for less
источник

IO

I O in Haskell
А вообще про профункторы&co (UPD: упс, самих профункторов там таки нет, только категории с подклассами, но как раз эти подклассы взяты от профункторов) в качестве свободных функций очень советую глянуть https://www.youtube.com/watch?v=xZmPuz9m2t0
источник

JS

Jerzy Syrowiecki in Haskell
занимаюсь я такой, значит, программированием на уровне типов.

data Tag = Tag1 | Tag2

написал две функции

fun1 :: Foo Tag1 -> Bar
fun1 = baz . qux

fun2 :: Foo Tag2 -> Bar
fun2 = baz . qux

и вдруг заметил, что их реализации похожи, значит, можно обобщить! пишу

fun :: Foo tag -> Bar
fun = baz . qux

но это начинает требовать (Alfa tag, Bravo tag, Charlie (Delta tag)) =>, которые в случае частных тэгов сами обнаруживались.

как с этим справляться?
источник

JS

Jerzy Syrowiecki in Haskell
(ну, кроме CPP)
источник

к

кана in Haskell
просто не писать сигнатуру)
источник

IO

I O in Haskell
По идее никак, потому что data family Any :: k прекрасно населяет Tag, так что где гарантия что tag /= Any, для которого инстанса нет
источник

KV

Kirill Valyavin in Haskell
Писать андерскор вместо констрейнтов
источник