Size: a a a

2021 January 25

ЖК

Жук Короед in Haskell
О, вот как. Спасибо.
источник

ЗП

Зигохистоморфный Пре... in Haskell
Жук Короед
А как haskell с классами обходится в рантайме?
У него методы инлайнятся при компиляции, или всякие виртуальные таблицы и динамическая диспетчеризация имеет место быть?
источник

AA

A64m AL256m qn<co... in Haskell
но превращение на этом остановится только если что-то пошло не так
источник

к

кана in Haskell
Жук Короед
О, вот как. Спасибо.
зная этот факт, можно явно констрейнты коерсить в аргументы

https://gist.github.com/kana-sama/c3ef42aac162e5ff4b19044e2b7fd15f
источник

к

кана in Haskell
оказалось кстати, что есть в тайпклассе только один элемент (и без зависимостей), то он из ньютайпа коерсится, то есть никаких дополнительных конструкторов не создается
источник

JS

Jerzy Syrowiecki in Haskell
Жук Короед
А как haskell с классами обходится в рантайме?
У него методы инлайнятся при компиляции, или всякие виртуальные таблицы и динамическая диспетчеризация имеет место быть?
в первом приближении виртуальные таблицы, а потом обычный оптимизатор инлайнит как любой вызов
источник

AA

A64m AL256m qn<co... in Haskell
так в том и дело, что виртуальные то таблицы просто так не соптимизируешь, а тут получаются статически известные, которые соптимизируешь еще как!
источник

JS

Jerzy Syrowiecki in Haskell
да, виртуальные таблицы, почти всегда статически известные
источник

ЖК

Жук Короед in Haskell
Jerzy Syrowiecki
да, виртуальные таблицы, почти всегда статически известные
В хаскеле, или и в жавах с сишарпами тоже?
источник

ВЩ

Взщз Щщщхш in Haskell
А в экзистенциальных типах таблица просто передаётся вместе со значением? Или там какая-то хитрая оптимизация?
источник

MK

Maxim Koltsov in Haskell
Взщз Щщщхш
А в экзистенциальных типах таблица просто передаётся вместе со значением? Или там какая-то хитрая оптимизация?
Вместе
источник

MK

Maxim Koltsov in Haskell
Она как доп поле конструктора
источник

JS

Jerzy Syrowiecki in Haskell
Жук Короед
В хаскеле, или и в жавах с сишарпами тоже?
в Хаскеле точно. я про Хаскель отвечал. зачем в этом чате кому-то жава или сишарп?
источник

ЖК

Жук Короед in Haskell
Была показана конструкция аналогичная
data MyClass a = MyClass a
myClassMethod :: MyClass a -> a -> Int
f :: MyClass a -> MyClass a -> Int
f x y = myClassMethod x + myClassMethod y
Получается, это (MyClass,myClassMethod) в случае хаскеля называется "виртуальной таблицей"?
источник

к

кана in Haskell
Взщз Щщщхш
А в экзистенциальных типах таблица просто передаётся вместе со значением? Или там какая-то хитрая оптимизация?
не знаю что за таблица, там просто инстанс хранится

было

{-# LANGUAGE ExistentialQuantification #-}

class X a where x :: a -> String
instance X Int where x = show . succ

data Y a = X a => Y
f :: Y a -> a -> String
f Y y = x y
main = print $ f Y (10 :: Int)


стало

newtype X a = X { x :: a -> String }
xInt :: X Int
xInt = X (show . succ)

data Y a = Y (X a)
f :: Y a -> a -> String
f (Y i) y = x i y
main = print $ f (Y xInt) (10 :: Int)
источник

AA

A64m AL256m qn<co... in Haskell
Jerzy Syrowiecki
в Хаскеле точно. я про Хаскель отвечал. зачем в этом чате кому-то жава или сишарп?
да потому, что если называть словари тайпклассов втейблами, то РАЗУМЕЕТСЯ будут думать про языки где втейблы реально есть, и где весь их смысл в том, что у одного статического типа они могут быть разными
источник

AA

A64m AL256m qn<co... in Haskell
Взщз Щщщхш
А в экзистенциальных типах таблица просто передаётся вместе со значением? Или там какая-то хитрая оптимизация?
там никакой оптимизации нету, конструктор словаря тайпкласса даже в конструктор экзистенциального типа не анпакается
источник

AA

A64m AL256m qn<co... in Haskell
Жук Короед
Была показана конструкция аналогичная
data MyClass a = MyClass a
myClassMethod :: MyClass a -> a -> Int
f :: MyClass a -> MyClass a -> Int
f x y = myClassMethod x + myClassMethod y
Получается, это (MyClass,myClassMethod) в случае хаскеля называется "виртуальной таблицей"?
нет, так не называется
источник

JS

Jerzy Syrowiecki in Haskell
могут или не могут, конструктивно это то же самое
источник

MK

Maxim Koltsov in Haskell
Да вот нифига не то же самое
источник