Size: a a a

2021 October 15

[

[BRM]White Rabbit in Haskell Start
Можешь прочитать thinking with types, если хочешь узнать про работу с типам в хаскеле и где она применяется
источник

SG

Serge S. Gulin in Haskell Start
ок, эту уже стараюсь, осиливаю постепенно
источник

SG

Serge S. Gulin in Haskell Start
скорее даже «осиляю постепенно»
источник

[

[BRM]White Rabbit in Haskell Start
👍
источник

[

[BRM]White Rabbit in Haskell Start
кстати, можно по идее воспользоваться синглтонами, основная идея которых вот в таком чуде
источник

[

[BRM]White Rabbit in Haskell Start
но я сам с ними не особо разбирался
источник

[

[BRM]White Rabbit in Haskell Start
и в книжке про них написано насколько я помню
источник

SG

Serge S. Gulin in Haskell Start
ок ок, пойду ковырять про них
источник

SG

Serge S. Gulin in Haskell Start
я про них начинал читать тут https://blog.jle.im/entry/introduction-to-singletons-1.html
источник

SG

Serge S. Gulin in Haskell Start
но не понял, поможет оно мне или нет
источник

SG

Serge S. Gulin in Haskell Start
Это и называется type erasure?
источник

И

Иван in Haskell Start
Да я и не знаю, сам учусь только
источник

DM

Dmitriy Mozhevitin in Haskell Start
data A = B | C | D
 deriving stock (Eq, Show)
 
data S (a :: A) where
 Sb :: S 'B
 Sc :: S 'C
 Sd :: S 'D

data SomeS where
 SomeS :: S a -> SomeS

mbB :: a -> Maybe (S 'B)
mbB _ = Just Sb

mbC :: a -> Maybe (S 'C)
mbC _ = Just Sc

xs :: [Maybe SomeS]
xs = [SomeS <$> mbC 1, SomeS <$> mbB 1]

ys :: [A]
ys = catMaybes $ xs <&> \case
 Just (SomeS x) -> case x of
   Sb -> Just B
   Sc -> Just C
   Sd -> Just D
 Nothing -> Nothing
источник

DM

Dmitriy Mozhevitin in Haskell Start
если я вас правильно понял
источник

DM

Dmitriy Mozhevitin in Haskell Start
возможно это косо-криво, но работает
источник

DM

Dmitriy Mozhevitin in Haskell Start
S - синглтон для A
mbA и mbB — функции, возвращающие метки
чтобы собрать эти метки в список, нужно завернуть их во что-то, что скрывает тайп параметр (экзистенциальный тип), иначе значения Sb и Sc в один список сложить не получится, ибо они имеют разные типы (S ‘B и S ‘C)

затем в списке SomeS "раскрываем" его и кладем в список соотв.значение метки
источник

SG

Serge S. Gulin in Haskell Start
Да, это именно оно
источник

SG

Serge S. Gulin in Haskell Start
Воу, спасибо за пример! Пойду изучать
источник

DM

Dmitriy Mozhevitin in Haskell Start
не за что)
источник

[

[BRM]White Rabbit in Haskell Start
Ну вроде похоже, тока зачем это чудо нужно, я не знаю
источник