Size: a a a

2020 December 17

к

кана in Haskell
призму мне составь
источник

к

кана in Haskell
на Plus (Lit a) (Lit b) <-> (a, b)
не вручную
источник

ЗП

Зигохистоморфный Пре... in Haskell
я делаю так
источник

ЗП

Зигохистоморфный Пре... in Haskell
class IsSymbol l <= AsPrism l s a | s l -> a where
 _Prism :: forall proxy. proxy l -> Prism' s a

-- type AsAdd s a = AsPrism "add" s (Tuple a a)

_Add :: forall s a. AsPrism "add" s (Tuple a a) => Prism' s (Tuple a a)
_Add = _Prism _add

instance asPrismAddF ∷ AsPrism "add" (AddF a) (Tuple a a) where
 _Prism _ = prism' (uncurry AddF) (\(AddF a b) -> Just (Tuple a b))

else instance asPrismVariant :: (Functor f, AsPrism "add" (f a) (Tuple a a), TypeEquals (VariantF ( add :: VF.FProxy f | tail ) a) (VariantF row a)) => AsPrism "add" (VariantF row a) (Tuple a a) where
 _Prism _ = dimap TE.from TE.to <<< _VariantF _add <<< _Add

else instance asPrismFMu :: (Functor f, AsPrism "add" (f (Mu f)) (Tuple a a)) => AsPrism "add" (Mu f) (Tuple a a) where
 _Prism _ = re _Mu <<< _Add

class AsAddF (s :: Type) (a :: Type) | s -> a where
 _AddF ∷ Prism' s (Tuple a a)

instance asAddFAddF ∷ AsAddF (AddF a) a where
 _AddF = prism' (uncurry AddF) (\(AddF a b) -> Just (Tuple a b))

else instance asAddFVariant :: (Functor f, AsAddF (f a) a, TypeEquals (VariantF ( add :: VF.FProxy f | tail ) a) (VariantF row a)) => AsAddF (VariantF row a) a where
 _AddF = dimap TE.from TE.to <<< _VariantF _add <<< _AddF

else instance asAddFMu :: (Functor f, AsAddF (f (Mu f)) a) => AsAddF (Mu f) a where
 _AddF = re _Mu <<< _AddF
источник

ЗП

Зигохистоморфный Пре... in Haskell
но это пурса
источник

K

Kir in Haskell
кана
но ведь тогда все составные термы и паттерны типа
biplate \case
 Plus (Lit a) (Lit b) -> Lit (a + b)
 other -> other
станут ужасно вербозными
Ну, да, ну а как иначе пропихнуть Info в каждый узел?
источник

ЗП

Зигохистоморфный Пре... in Haskell
Kir
Ну, да, ну а как иначе пропихнуть Info в каждый узел?
я пихаю через ката + атрибутивная аглебра
источник

K

Kir in Haskell
Зигохистоморфный Препроморфизм
я пихаю через ката + атрибутивная аглебра
Можно пример?
источник

ЗП

Зигохистоморфный Пре... in Haskell
ну вот есть у тебя
Expr

а ката+аг сделают такое
type TExpr = Cofree ExprNF Type

где Type это твоя аннотация
источник

K

Kir in Haskell
Зигохистоморфный Препроморфизм
ну вот есть у тебя
Expr

а ката+аг сделают такое
type TExpr = Cofree ExprNF Type

где Type это твоя аннотация
А как в Decl его пропихнуть?
источник

ЗП

Зигохистоморфный Пре... in Haskell
мне кажется ты уже говоришь про мутуалрекуршн?
источник

K

Kir in Haskell
Да
источник

ЗП

Зигохистоморфный Пре... in Haskell
по идее точно также, только уже через hrecursion-schemes
источник

ЗП

Зигохистоморфный Пре... in Haskell
например compdata, compstrat
источник

AV

Alexander Vershilov in Haskell
А как с линзами красиво писать foo .~ bar (текст на несколько строк)
источник

MK

Maxim Koltsov in Haskell
let text = ...
foo .~ bar text
источник

AV

Alexander Vershilov in Haskell
Скобочки не красиво, $ не сработает, do+BlockArguments?
источник

AV

Alexander Vershilov in Haskell
если текстов 30 штук о плохо
источник

MK

Maxim Koltsov in Haskell
do + BA может сработать
источник

AV

Alexander Vershilov in Haskell
Туда-сюда прыгать надо будет
источник