Size: a a a

2016 March 18

ES

Evgeny Starikov in Haskell
Нурлан
а как объявление конструктор типа Map посмотреть?
источник

Н

Нурлан in Haskell
Я так понял @int_index  говорил о типе, а сигнатуру функции я и в терминале могу посмотреть.
источник

Н

Нурлан in Haskell
Правда в этой функции в hoogle какая-то странная сигнатура.
источник

Н

Нурлан in Haskell
Evgeny Starikov
data MyType a where
   MyType :: Num a => a -> MyType a
а где объявление конструктора типа?
источник

ES

Evgeny Starikov in Haskell
"MyType a" ?
источник

VZ

Vladislav Zavialov in Haskell
Нурлан
а как объявление конструктор типа Map посмотреть?
источник

Н

Нурлан in Haskell
Evgeny Starikov
"MyType a" ?
я хочу Stream a = a :& Stream a, но компилятор (7.10.3) говорит, что :& неразрешен в этой конутрукции
источник

Н

Нурлан in Haskell
Работает!!!
источник

ES

Evgeny Starikov in Haskell
Vladislav Zavialov
Нужно понимать, что тогда словарик будет с каждым значением отдельно таскаться.
Возвращаясь к этому. Не совсем ясно, почему мы будем таскать за собой vtable.

Допустим, есть наш любимый тип:

data MyType a where
   MyType :: Num a => a -> MyType a


Ведь, когда мы создаем значение, то конкретный тип известен compile-time:

> let a = MyType (123::Int)
> :t a
=> a :: MyType Int

И чтобы его использовать нам вроде не нужен никакой vtable, т.к. все известно статически.

И, если это не так, то как оно происходит на самом деле? : )
источник

VZ

Vladislav Zavialov in Haskell
Ты когда значение это создал, то vtable положилось в него. Сейчас статически тип известен, а через 2 строки ты в forall его обернешь и хрен там.
источник

ES

Evgeny Starikov in Haskell
А в чем тогда отличие от не GADT?
источник

VZ

Vladislav Zavialov in Haskell
Без GADT словарик в каждую функцию передается, но если тип статически известен, то срабатывает инлайнинг обычный
источник

ES

Evgeny Starikov in Haskell
А если я ничего в forall не заворачиваю?
источник

VZ

Vladislav Zavialov in Haskell
То кто-нибудь другой завернуть может. Но если это значение из функции не возвращается, то хз что там оптимизатор намутит, смотреть генерируемый Core надо.
источник

VZ

Vladislav Zavialov in Haskell
Но подозреваю, что GHC в этом случае оптимизаций не выполняет, т.к. такое на практике едва ли вылезет когда-либо
источник

Н

Нурлан in Haskell
о каком словарике вы говорите?
источник

VZ

Vladislav Zavialov in Haskell
Словарь методов
источник

VZ

Vladislav Zavialov in Haskell
vtable
источник

VZ

Vladislav Zavialov in Haskell
Структура, в которой хранятся методы класса для конкретного типа
источник

VZ

Vladislav Zavialov in Haskell
Напр., для Eq можно рассмотреть

data EqDict a = EqDict { (==) :: a -> a -> Bool; (/=) :: a -> a -> Bool }
источник