Size: a a a

2021 May 30

YS

Yan Shkurinskiy in Haskell
можно какой-нибудь "удобный" алиас функции сделать
источник

YS

Yan Shkurinskiy in Haskell
там наверное не так мало способов
источник

YS

Yan Shkurinskiy in Haskell
лишь бы компилятор "понял", что тут ньютайп)
источник

¯

¯\_(ツ)_/¯ in Haskell
а. хорошо. спасибо вам всем, я про эти вещи почитаю
источник

к

кана in Haskell
если сделать "свой Word32LE" без ньютайпа, то все равно нужна какая-то функция, чтобы получить стоковый Word32
источник

к

кана in Haskell
а что именно понимается под "работать так же как с Word32"?
источник

¯

¯\_(ツ)_/¯ in Haskell
ну да. это же разные типы. но работать-то они должны одинаково. отличие лишь в том, что Binary для них по-другому реализован, а остальное одинаковое. но да, я понимаю, что это разные типы, так что придётся оборачивать Word32. я ещё хотел найти реализацию Word32, но там вот это data {-# CTYPE "HsWord32" #-} Word32 = W32# Word#
источник

к

кана in Haskell
если это например сложение или литералы, то достаточно просто к Word32LE добавить deriving newtype Num добавить

если битовые операции, то deriving newtype (Eq, Bits)
источник

¯

¯\_(ツ)_/¯ in Haskell
да дело-то в том, что таких вот инстансов у Word32 15 штук (и в других библиотеках могут быть свои инстансы, но речь даже не про них).

в общем, я хотел сказать, что смысл-то у Word32 и Word32LE одинаковый (они содержат в себе одну и ту же информацию), однако для Word32 Binary реализован одним образом, а для Word32LE по-другому. так что оборачивание структуры кажется оверхедом, но оно надо, чтобы компилятор смог понять, что кодирование/декодирование происходит не в BE формате, а в LE
источник

к

кана in Haskell
никакого оборачивания структуры с newtype не происходит
источник

к

кана in Haskell
вся суть newtype в том чтобы для одного и того же типа иметь несколько номинальностей (то есть иметь разные инстансы, или не давать тайпчекаться какой-то код). В рантайме этих оберток нет, они существуют только во время компиляции
источник

к

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

¯

¯\_(ツ)_/¯ in Haskell
извините, что я так туплю. например, какая-то функция принимает Word32, а у меня есть только Word32LE, то что мне делать? это вообще возможно?
источник

к

кана in Haskell
возможно я не так понял

> кажется оверхедом
имеется в виду оверхедом в коде, мол больше писать, или оверхедом в рантайме, мол лишние распаковки и запаковки?

тут можно:
1. распаковать значение явно через селектор/матчинг
2. использовать coerce на значении
3. использовать coerce на функции, чтобы она принимала Word32LE
источник

¯

¯\_(ツ)_/¯ in Haskell
да. я неправильно использовал слово. имелось в виду, что на клавиатуре больше клавиш придётся нажимать. и как раз таки, если использовать матчинг, то придётся больше клавиш нажимать, но хорошо. я почитаю о том, что вы (и не только вы), написали. спасибо
источник
2021 May 31

AF

Alexey Fedotov in Haskell
это и для семантики полезно. Канонический пример UnsafeString -> SafeString
источник

ЖК

Жук Короед in Haskell
Является ли тип [] функтором в ТК смысле, и почему?
Или только (:,map)?
Или (:,map,[], тип [])?
источник

ЖК

Жук Короед in Haskell
Или (тип [], [],:,паттерн-матчинг) является функтором, а реализация fmap лишь док-во этого?
источник

O

Ortofax in Haskell
функтором является ([] :: * -> *, fmap :: (a -> b) -> [a] -> [b])
источник

Oℕ

Oleg ℕizhnik in Haskell
это незначительные терминолоческие детали, функтором можно называть как только тайп-конструктор, пару тайп-конструктора с действием на функции, так и всю чевёрку вместе с законами
источник