Size: a a a

2020 November 06

YR

Yuki Rito in Haskell
хотя да, если репрезентация разная, то в compile time не преобразуешь, а инстанс - это компайл тайм. Альтернатива - TH выводить, хоть как и хоть из чего. Или дженериками, но там должны быть изоморфные структуры же
источник

к

кана in Haskell
кана
newtype X = X Int
 deriving newtype Show
 deriving Ord via Helper X

это то же самое что и

data X = X Int

instance Show X where
 show = coerce (show :: Int -> String)

instance Ord X where
 compare = coerce (compare :: Helper X -> Helper X -> Ordering)
вот выхлоп из ghc с -ddump-deriv
источник

к

кана in Haskell
убрал только лишние методы и неймспейсы
источник

YR

Yuki Rito in Haskell
аа, прям явно даже coerce-ит
источник

к

кана in Haskell
Yuki Rito
хотя да, если репрезентация разная, то в compile time не преобразуешь, а инстанс - это компайл тайм. Альтернатива - TH выводить, хоть как и хоть из чего. Или дженериками, но там должны быть изоморфные структуры же
а в компайлтайм и нет преобразований никаких

newtype X = X { fromX :: Int }
X = id
fromX = id
coerce = id
источник

YR

Yuki Rito in Haskell
ну ОК, логично. Надо просто иногда утрамбовывать все и сомневаться :) Тогда лучше начинаешь понимать. Спасибо
источник

KV

Kirill Valyavin in Haskell
A64m AL256m qn I0
а так-то можно коэрсить дженерик-репрезентации, есть исо-дерайвинг
А как делется исо-дерайвинг?
источник

AA

A64m AL256m qn<co... in Haskell
Kirill Valyavin
А как делется исо-дерайвинг?
источник

AA

A64m AL256m qn<co... in Haskell
Yuki Rito
хотя да, если репрезентация разная, то в compile time не преобразуешь, а инстанс - это компайл тайм. Альтернатива - TH выводить, хоть как и хоть из чего. Или дженериками, но там должны быть изоморфные структуры же
в компайл тайм можно "преобразовывать", но бесплатность будет зависеть от того насколько хорошо оптимизируются тайпклассы, а с коэрсиблами по построению зиро кост
источник

KV

Kirill Valyavin in Haskell
Замечательно, спасибо
источник

YR

Yuki Rito in Haskell
да, "преобразовывать" в кавычках конечно.
источник

YR

Yuki Rito in Haskell
"зиро кост"... пахнуло даже как-то ржавчиной :)
источник

AA

A64m AL256m qn<co... in Haskell
это могильный мемес
источник

AV

Alexander Vershilov in Haskell
А возмжно как-то с линзами имея:

data A t b = A { foo :: X t b, bar :: Y t b } поменять все поля типа t и в foo и в bar
источник

AV

Alexander Vershilov in Haskell
А то если делать & #foo .. %~ то типы не сходятся
источник

AV

Alexander Vershilov in Haskell
хм, хотя меня и unsafeCoerce устроит..
источник

AV

Alexander Vershilov in Haskell
а вроде даже и safe и на этом я остановлюсь
источник

IK

Ilya Kos in Haskell
А stylish-haskell разве не перешел на парсер из GHC?
источник

IK

Ilya Kos in Haskell
Или мне это приснилось?
источник

KV

Kirill Valyavin in Haskell
Ilya Kos
А stylish-haskell разве не перешел на парсер из GHC?
Перешёл
источник