Size: a a a

2021 May 03

a

adam in Haskell
ну так тоже можно, да, спасибо
источник

a

adam in Haskell
просто странно что местами ` работает, а местами нет
источник

IO

I O in Haskell
В плане масштабируемости я бы наверное обмазался синглтонами с классом типа SingAll,

type family Sing :: k -> Type

class SingI t where
 sing :: Sing t

class SingAll k c where
 singAll :: Sing (t :: k) -> (c t => r) -> r


data Tag = Tag1 | Tag2

data STag t where
 STag1 :: STag 'Tag1
 STag2 :: STag 'Tag2

type instance Sing = STag

instance SingI 'Tag1 where
 sing = STag1

instance SingI 'Tag2 where
 sing = STag2

instance (c 'Tag1, c 'Tag2) => SingAll Tag c where
 singAll STag1 f = f
 singAll STag2 f = f

deriveAlpha :: forall t r . SingI t => (Alpha t => r) -> r
deriveAlpha f = singAll @_ @Alpha (sing @t) f


Тогда при добавлении нового тега нужно изменить STag, SingAll, дать инстанс SingI, зато сами derive функции можно не трогать
источник

IO

I O in Haskell
(Ну и как всегда можно th-костылем подпереть)
источник

Y

Yuuri in Haskell
В — Выразительность
источник

[

[BRM]White Rabbit in Haskell
Точно самом? Мне кажется, там таки "один из самых".
источник

IO

I O in Haskell
Любишь с типами играться - люби и синглтоны писать
источник

JS

Jerzy Syrowiecki in Haskell
самый выразительный из тех, на которых я умею писать
источник

[

[BRM]White Rabbit in Haskell
Ладно, тут справедливо.
источник

JS

Jerzy Syrowiecki in Haskell
а какие вы считаете более выразительными?
источник

[

[BRM]White Rabbit in Haskell
Мне кажется, стоит смотреть в сторону завтипов.
(Правда, сам я на них не кодил)
источник

Y

Yuuri in Haskell
Agda
источник

a

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

Y

Yuuri in Haskell
OCaml в определённых местах выразительнее
источник

[

[BRM]White Rabbit in Haskell
Насколько я знаю, костыли это больно, а в хаскеле ещё и режет скорость
источник

a

adam in Haskell
ну так а кто сказал что синглтоны это не больно
источник

[

[BRM]White Rabbit in Haskell
А вообще, язык хороший если:
Хороший код писать легко
Плохой код писать сложно

Хаскель +- это соблюдает.
источник

Y

Yuuri in Haskell
А если какой-то код на хаскеле писать сложно, видимо, он плохой!
источник

[

[BRM]White Rabbit in Haskell
Да, я вот недавно мучился с указателями, там как раз такое правило соблюдалось. Писалось сложно, оказалось, что это я идиот.
источник

IO

I O in Haskell
Между прочим, эти KnownTag и SingAll по сути просто специализированные версии :< и All отсюда, только список фиксированный (['Tag1, 'Tag2, ...])
источник